Open Source French Drone Identification

moi je ne fais que du cosmétique, la partie la plus importante je n’aurais pas les compétences!!!
pour le git on verra :slight_smile:

du coup j’ai un peu modifié le code de la balise pour faire en sorte que le nom de l’AP contienne l’adresse MAC
ça donne par exemple ça:

BALISE_DGAC-84_CC_A8_88_86_77
le préfixe est paramétrable, max 14 caractères, dans mon exemple c’est “BALISE_DGAC-”

le fichier zip qui contient le source est à jour…

1 Like

Félicitation pour ton boulot, ça semble top, j’ai l’intention de modifié ton code pour intégrer le déclenchement de ma cam xiaomi yi par wifi un peu à la manière dont damien Donche l’a fait pour sa gopro (message 370 de ce fil je crois).

Le truc c’est que je n’ai déjà pas le moyen de compiler avec succès ton code de base, j’ai installer manuellement les librairies et le compilateur dit qu’il manque une accolade à la fin du .ino, j’ai vérifier et c’est faux, la fonction loop est bien fermée.
J’ai déjà eu le même problème dans un autre projet et ma main au feu qu’il s’agit d’un problème de librairies (bon on va dire un doigt).

Serais-ce déplacé de te demander de nous jeter ton dossier de librairies en téléchargement histoire de régler le problème?

je veux bien mais de quel dossier parles-tu? dans le dossier arduinon j’ai lib et libraries…

Super, dossier “libraries”, tu dois retrouver dedans des dossiers comportant le nom de chaque librairie que tu à installé et à l’intérieur de chaque dossier se trouve le fichier .h correspondant.
Merci.

juste pour ma culture perso: il me semblait que le programme n’utilisait que les librairies incluses dans le projet… ainsi que celles fournies avec la carte sélectionnée, j’ai pas bon, il y a d’autres choses cachées?
ça aurait été bien de savoir si ce souci était général ou juste toi, car si général, ça signifie que j’utilise quelque chose de non standard et c’est pas bon du coup…

de ton côté tu es sûr d’essayer de compiler mon code avec une des deux cartes esp01 ou esp32? sans rien d’autre ajouté ensuite?

je vais mettre à dispo en attendant:
https://www.tranquille-informatique.fr/perso/aeromodelisme/balise-dgac/libraries.zip

@Xav_YeYe
Alors là, je ne sais pas te répondre.
Ce que je peux te dire c’est que j’ai du intaller manuellement (pas trouvés dans les listes malgré l’ajout des url json correspondantes) esp_wifi.h et WebServer.h

Je compile sans carte, pour vérifier la validité du .ino mais je l’ai paramétré pour esp32 vu que j’utiliserais un D1 mini voir un D1 classique pour les essais.
La sélection carte est valide puisque j’ai déjà utilisé ces paramètres pour un autre .ino sur cette même carte.

Actuellement je me demande même si ça ne serais pas plus clean niveau hardware (et poids!) en jetant le BN220 aux oubliettes et en récupérant la position GPS via mavlink pour la balise.

Voir même puisqu’on y est (a mavlink) mettre à jour un programme de télémétrie ou on incorpore la balise DGAC (second AP/SSID dans le programme), ainsi ou aurait une télémétrie rapide (pas comme la radio) pour télécharger des dataflashlog + la balise…
Mais là ça commence à être hors de portée de mes modestes compétences je crois…

Voici une version de balise avec affichage d’une carte utilisant Open Street Map ,un projet ayant le but de créer une carte libre du monde et Leaflet, une bibliothèque Javascript open-source.


Elle tourne sur un esp8266 WEMOS D1 mini relié à un GPS BN220 -> carte Wemos D1 R1 et Flash size “4M (FS:none OTA:~1019KB)”

Il suffit de se connecter avec un smartphone, sans mot de passe, sur le réseau qui apparait = concatenation du SSID et de la MAC adresse (merci à @Xav_YeYe).

La case -SAT correspond à l’un des statuts du GPS, on peut avoir WAIT SAT, -ou+SAT selon que l’on perd ou gagne 1 satellite, NO SAT en cas de perte totale. La carte se déplace sur le point de départ qui est en bas à gauche quand on a suffisamment de satellites >5 et un HDOP <2. À ce moment on affiche la position du départ DLNG et DLAT et le statut ATTENTE passe en DEPART, là on peut décoller, la balise émet. S’affiche également l’heure universelle, le nombre de trames émises, le temps écoulé et la vitesse max.

https://github.com/dev-fred/GPS_Tracker_ESP8266

super, c’est cool la gestion du site etc, j’apprends :slight_smile:
je pense que ça:
// Vérification ssid max 30
static_assert((sizeof(ssid)/sizeof(*ssid))<=32, “AP SSID should be less than 32 letters”);
ne sert pas car la déclaration du ssid à 32:
char ssid[32];
va toujours donner un assert à true à la compil…
moi du coup j’ai fait l’assert sur le prefixe_ssid pour être sûr que ça dépasse pas 32 au final avec l’adresse mac et les caractères ajoutés…

Félicitations !

J’ai rajouté les liens des postes avec les développements de la communauté dans le premier poste !

3 Likes

Merci, j’ai corrigé sur github.

@Xav_YeYe
Ca se complique, même avec ton dossier libraries il ne peux pas compiler.
“esp_wifi.h: No such file or directory”

Ces satanées librairies m’en ont toujours fait voir de toutes les couleurs (idem sur un autre OS), je donne ma langue au chat. Y-aurait-il tout un tas de libraries lambda auxquelles je n’ai pas accès?
Mystère.

Peut-être une autre piste, as-tu l’URL du package esp32 dans ton gestionnaire de cartes ?

@dev01fred
Et la réponse est oui!
Mais je commence à me demander si le gestionnaire de bibliothèque fonctionne correctement… j’ai manuellement installer esp_wifi.h et à la compilation l’erreur concernant ce dernier n’est plus là (il indique une erreur mais liée à une accolade), hors esp_wifi.h ne figure même pas dans le gestionnaire de bibliothèque.

Bizarre.
J’ai du rater un truc…

Voilà un aperçu des erreurs retournées par le compilateur :

C:\Users\Blaise\Documents\Arduino\libraries\esp_wifi/esp_wifi.h:1187:184: error: expected unqualified-id before ‘<’ token
extern "C" {
^
balise_dgac_web:565:1: error: expected ‘}’ at end of input
exit status 1
expected ‘}’ at end of input

Si je comprend bien c’est esp_wifi.h qui a un problème? Pourtant il vient bien de chez Espressif…

Avec cette configuration

//#define CARTE ‘esp01’
#define CARTE ‘esp32’

Si je compile avec une carte ESP8266, je reproduis ton problème :

balise_dgac_web:49:26: fatal error: esp_wifi.h: No such file or directory
     #include "esp_wifi.h"
                          ^
compilation terminated.
exit status 1
esp_wifi.h: No such file or directory

Et le problème disparait en choisissant un type de carte ESP32.
Cette librairie est liée au type de carte choisi, elle dépend du matériel, c’est pourquoi tu ne la trouves pas sous le dossier libraries.

oui c’est ce que j’allais demander, c’est important de bien faire correspondre la carte choisie au niveau arduino (dans les menus là haut) et ici le define.

pour faire un test vraiment similaire à moi, choisis cette carte dans la liste:

image

(vérifie aussi la version arduino, elle ne doit pas être trop faible)
puis dans le code tu fais ça:

    //#define CARTE ‘esp01’
    #define CARTE ‘esp32’

et ça doit passer, la carte cible est une ESP32 ici.

ensuite, tu testes ça:
carte choisie:

image

#define CARTE ‘esp01’
//#define CARTE ‘esp32’

et là tu compiles et ça doit passer aussi, pour une carte esp01 à base de ESP8266

moi j’ai rien de spécial, je suis parti d’une install arduino toute propre justement pour éviter de “partager” avec des choses inhabituelles…

@dev01fred
Nom de dieu, effectivement j’utilisais du ESP8266 et pas du ESP32, puisque la carte est 8266… comme l’a décris Xav_YeYe à priori ça passe quand même…
Le dernier problème était lié à la librairie TinyGPS++.h, je me suis débrouillé.

Et cette fois, ça compile!

@Xav_YeYe
Merci pour les explications dont par ailleurs je n’ai pas eu besoin (je viens de les lire mais j’ai réussi à compiler) d’intuition j’ai utilisé les même paramètres que toi (sauf la vitesse de téléversement).

Pour le reste j’ai jeter un œil sur la façon de dialoguer sur mavlink avec le pixhawk, il doit y avoir moyen de récupérer la position gps (notamment gps_raw) assez “facilement” dans le set de données MAV_DATA_STREAM_EXTENDED_STATUS.
Quand à la position Home, je cherche encore dans quel set de données le message se trouve…

La balise à besoin d’autre chose comme info (j’ai plus le souvenir)?

pour la balise dgac, la position home n’est rien d’autre que la première position captée suite au premier fix réussi, et stockée quelque part.

Cadeau pour le mavlink !

            if (msg.msgid == MAVLINK_MSG_ID_GLOBAL_POSITION_INT) {
                mavlink_global_position_int_t packet;
                mavlink_msg_global_position_int_decode(&msg, &packet);
                drone_idfr.set_altitude(packet.alt * 0.001f);
                drone_idfr.set_heading(static_cast<uint16_t>(packet.hdg * 0.01f));
                drone_idfr.set_heigth(packet.relative_alt * 0.001f);
                drone_idfr.set_lat_lon(packet.lat, packet.lon);
                drone_idfr.set_ground_speed(sqrt(pow(packet.vx, 2)+ pow(packet.vy, 2)) * 0.01f);
                break;
            }
            if (msg.msgid == MAVLINK_MSG_ID_HOME_POSITION) {
                mavlink_home_position_t packet;
                mavlink_msg_home_position_decode(&msg, &packet);
                drone_idfr.set_home_lat_lon(packet.latitude, packet.longitude);
                break;
            }
            if (msg.msgid == MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN) {
                mavlink_gps_global_origin_t packet;
                mavlink_msg_gps_global_origin_decode(&msg, &packet);
                drone_idfr.set_home_lat_lon(packet.latitude, packet.longitude);
                break;
            }
            if (msg.msgid == MAVLINK_MSG_ID_VFR_HUD) {
                mavlink_vfr_hud_t packet;
                mavlink_msg_vfr_hud_decode(&msg, &packet);
                drone_idfr.set_altitude(packet.alt);
                drone_idfr.set_heading(packet.heading);
                drone_idfr.set_ground_speed(packet.groundspeed);
                break;
            }

Pour avoir le home en mavlink :

                mavlink_message_t msg_send;
                mavlink_command_long_t msg_long;
                msg_long.command = MAV_CMD_GET_HOME_POSITION;
                msg_long.confirmation = 0;
                msg_long.target_system = drone_sysid;
                msg_long.target_component = drone_compid;
                msg_long.param1 = 0;
                msg_long.param2 = 0;
                msg_long.param3 = 0;
                msg_long.param4 = 0;
                msg_long.param5 = 0;
                msg_long.param6 = 0;
                msg_long.param7 = 0;

                mavlink_msg_command_long_encode_chan(my_sysid, my_compid, chan, &msg_send, &msg_long);

@Xav_YeYe
Fix 3D ou supérieur je suppose… Soit GPS_FIX_TYPE >= 3

@khancyr
Badaboum!
Bon là ça va un peu vite pour moi.

Si je pige bien l’avantage de ce message c’est qu’il donne une position corrigée par le pixhawk avec l’accéléromètre. Il se trouve dans le set de données MAV_DATA_STREAM_POSITION

Inconvénient, pour savoir quel est l’état du gps (nombre de satellites, type de fix…) il faut toujours avoir GPS_RAW_INT qui se trouve dans le set de données MAV_DATA_STREAM_EXTENDED_STATUS

Soit plus de précision mais deux sets de données à demander et à traiter au lieu d’un seul, j’ai bon?