Programmation ESP8266 [Réglé]

Jybz Membre non connecté
-
- Voir le profil du membre Jybz
- Inscrit le : 10/10/2018
- Groupes :
-
Administrateur
-
Forgeron
Au final, ça s'était fait sans trop de mal avec Mga6, donc je ne l'ai pas fait.
Mais voilà que mon pc de prog a laché, je passe sur mon autre PC qui lui est sur Cauldron, et là l'installation ne passe pas ! C'est le problème...
Citation :
[...]
[ALL ] checking for XML_StopParser... yes
[ALL ] checking whether to use python... yes
[ALL ] checking for python... /usr/bin/python
[ALL ] checking for python2.7... no
[ERROR] configure: error: python is missing or unusable
[ERROR] gmake[4]: *** [Makefile:8725: configure-gdb] Error 1
[ALL ] gmake[4]: Leaving directory '/home/jibz/outils/esp-open-sdk/crosstool-NG/.build/xtensa-lx106-elf/build/build-gdb-cross'
[ERROR] gmake[3]: *** [Makefile:845: all] Error 2
[ALL ] gmake[3]: Leaving directory '/home/jibz/outils/esp-open-sdk/crosstool-NG/.build/xtensa-lx106-elf/build/build-gdb-cross'
[ERROR]
[ERROR] >>
[ERROR] >> Build failed in step 'Installing cross-gdb'
[ERROR] >> called in step '(top-level)'
[ERROR] >>
[ERROR] >> Error happened in: CT_DoExecLog[scripts/functions@257]
[ERROR] >> called from: do_debug_gdb_build[scripts/build/debug/300-gdb.sh@120]
[ERROR] >> called from: do_debug[scripts/build/debug.sh@35]
[ERROR] >> called from: main[scripts/crosstool-NG.sh@646]
[ERROR] >>
[ERROR] >> For more info on this error, look at the file: 'build.log'
[ERROR] >> There is a list of known issues, some with workarounds, in:
[ERROR] >> 'share/doc/crosstool-ng/crosstool-ng-1.22.0-60-g37b07f6f/B - Known issues.txt'
[ERROR]
[ERROR] (elapsed: 8:45.55)
[ALL ] checking for XML_StopParser... yes
[ALL ] checking whether to use python... yes
[ALL ] checking for python... /usr/bin/python
[ALL ] checking for python2.7... no
[ERROR] configure: error: python is missing or unusable
[ERROR] gmake[4]: *** [Makefile:8725: configure-gdb] Error 1
[ALL ] gmake[4]: Leaving directory '/home/jibz/outils/esp-open-sdk/crosstool-NG/.build/xtensa-lx106-elf/build/build-gdb-cross'
[ERROR] gmake[3]: *** [Makefile:845: all] Error 2
[ALL ] gmake[3]: Leaving directory '/home/jibz/outils/esp-open-sdk/crosstool-NG/.build/xtensa-lx106-elf/build/build-gdb-cross'
[ERROR]
[ERROR] >>
[ERROR] >> Build failed in step 'Installing cross-gdb'
[ERROR] >> called in step '(top-level)'
[ERROR] >>
[ERROR] >> Error happened in: CT_DoExecLog[scripts/functions@257]
[ERROR] >> called from: do_debug_gdb_build[scripts/build/debug/300-gdb.sh@120]
[ERROR] >> called from: do_debug[scripts/build/debug.sh@35]
[ERROR] >> called from: main[scripts/crosstool-NG.sh@646]
[ERROR] >>
[ERROR] >> For more info on this error, look at the file: 'build.log'
[ERROR] >> There is a list of known issues, some with workarounds, in:
[ERROR] >> 'share/doc/crosstool-ng/crosstool-ng-1.22.0-60-g37b07f6f/B - Known issues.txt'
[ERROR]
[ERROR] (elapsed: 8:45.55)
Vous voyez le problème ?
[ALL ] checking for python... /usr/bin/python
[ALL ] checking for python2.7... no
J'ai changé 2/3 fois le lien symbolique /usr/bin/python.
J'en suis même venu à faire un cp de python2.7 sur python !
Citation :
# file /usr/bin/python
/usr/bin/python: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=8fd337b674f7f04288a8d9e5654ad0bd63c8ae45, stripped
/usr/bin/python: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=8fd337b674f7f04288a8d9e5654ad0bd63c8ae45, stripped
Ça ne devrait pas planter... Des idées ?
Jybz
Téléverser une image : /wiki/hebergement-de-fichiers-sur-mlo
Arch | Machine | OS |
x86_64 | lenovo x250 | mga9 |
armv7hl | bananapro | mga9 |
aarch64 | Raspberry Pi 4B | mga9 |

Papoteur Membre non connecté
-
- Voir le profil du membre Papoteur
- Inscrit le : 03/10/2011
- Groupes :
-
Modérateur
-
Équipe Mageia
-
Administrateur
-
Forgeron
Code BASH :
python --version
Yves

funix Membre non connecté
-
- Voir le profil du membre funix
- Inscrit le : 17/12/2012
- Site internet
- Groupes :

Jybz Membre non connecté
-
- Voir le profil du membre Jybz
- Inscrit le : 10/10/2018
- Groupes :
-
Administrateur
-
Forgeron
Pour mon cas, j'ai un esp8266 monté sur une carte MCU node v3.
Adepte des solutions libres et de la vrai programmation, je montre ici une méthode pour programmer en C avec un SDK FreeRTOS et Eclipse.
On n'utilisera pas l'esp comme un module pour envoyer des commandes AT+ via une interface série !
J'ai choisi :
esp-open-rtos : https://github.com/SuperHouse/esp-open-rtos/
Une implémentation de FreeRTOS maintenu par une entreprise (SuperHouse), qui a choisit un SDK alternatif :
esp-open-sdk : https://github.com/pfalcon/esp-open-sdk/
Une implémentation pour les couches bas-niveau de l'ESP, malheureusement pas entièrement ouverte, mais un choix bien plus ouvert que le SDK proposé par l'entreprise espressif (qui développe les microcontrôleur esp).
esptool : https://github.com/espressif/esptool
Le logiciel de programmation du microcontrôleur.
Quelques points intéressant :
esp-open-sdk prends en charge l'ipv6, le chargeur de démarrage (bootloader) a été choisit libre aussi à une adresse assez basse, il me semble que ça permet d'avoir de plus gros logiciels !
esp-open-rtos fourni une quantité immense d'exemple ! Il a été particulièrement pensé pour être utilisé avec vim (

Les dépendances du projets sur Mageia (il y en a peut-être un ou deux qui me manque si je les avait déjà installé sans m'en rendre compte) :
Code BASH :
# urpmi make unrar autoconf automake libtool gcc gperf gperf-devel flex bison texinfo gawk python python-serial sed git unzip bash help2man wget bzip2 automake lib64python-devel python3-serial
Je garde les SDK et mes dossiers de travaux séparés :
~/outils/
et
~/workspaces/
On copie les git dans outils :
Code BASH :
$ cd ~/outils $ git clone --recursive https://github.com/pfalcon/esp-open-sdk.git $ git clone --recursive https://github.com/Superhouse/esp-open-rtos.git $ git clone https://github.com/espressif/esptool.git
On fini de télécharger le reste du sdk et lance la compilation en même temps. On choisit "standalone" pour bien préciser qu'on ne veut pas une installation unique sur le système, qu'on puisse avoir plusieurs compilateur.
Code BASH :
$ cd ~/outils/esp-open-sdk/ $ make toolchain esptool libhal STANDALONE=n
(prenez un café, il n'accepte pas l'option -j8 pour faire de la compilation en parallèle... Vous avez peut-être 20 minutes devant vous, plus encore si votre connexion est lente.)
Petite explication du esp-open-rtos :
Il est développé de tel manière qu'une forte dépendance existe dans les dossiers. Pour en sortir et pouvoir utiliser Eclipse, il faut bien comprendre deux "dimensions".
1) La compilation des librairies dans un environnement (normalement une seule fois pour le projet)
2) La compilation de notre application dans un autre (celui d'Eclipse).
Il est peut-être possible d'avoir une meilleur intégration et de compiler et les librairies et le projet de manière indépendante des autres projets, mais je n'ai pas poussé aussi loin mes recherches. Ici je tricherais, je vais créer un projet bidon, le compiler, cette compilation génèrera les librairies nécessaire qu'on réutilisera pour notre projet.
Donc dans un premier temps on compile les librairies statiques (qui seront liés aux projets). Normalement, on ne modifiera jamais la pile IP par exemple, ni autre base-couche d'abstraction de notre micro-contrôleur.
Ainsi, on peut créer un projet dans le dossier ~/outils/esp-open-rtos/example/ un dossier qui contiendra nos librairies, par exemple :
Code BASH :
$ mkdir ~/outils/esp-open-rtos/example/template
Dans ce dossier, nous allons y ajouter 3 fichiers :
FreeRTOSConfig.h (nom important et sensible à la casse)
Makefile (nom important et sensible à la casse)
templace.c (ou un autre nom)
Le plus simple, templace.c :
Code C :
void user_init(void) { }
Ce fichier ne sert à rien d'autre qu'éviter une erreur de compilation de nos librairies.
Makefile
Code :
PROGRAM=template
include ../../common.mk
Ici, on pense à changer la première ligne, on remplace template par le nom de notre projet, le nom du répertoire.
FreeRTOSConfig.h
Code C :
#define configUSE_PREEMPTION 0 #define configMINIMAL_STACK_SIZE 128 #define INCLUDE_xTaskGetHandle 1 /* Use the defaults for everything else */ #include_next<FreeRTOSConfig.h>
Ce fichier est important pour l'application souhaité, il permet de sélectionner des morceaux qu'on souhaite avoir ou pas. Ici j'ai repris l'exemple "blink" en rajoutant la ligne pour obtenir le nom d'une tâche pour la réveiller par une autre. Pour avoir une liste exhaustive des remplacement possible, voir les fichiers :
~/outils/esp-open-rtos/FreeRTOS/Source/include/FreeRTOS.h
~/outils/esp-open-rtos/FreeRTOS/Source/include/FreeRTOSConfig.h
Pour cette compilation, sans toucher au système, nous allons temporairement ajouter les fichiers exécutables pour compiler :
Code BASH :
$ export PATH=~/outils/esp-open-sdk/xtensa-lx106-elf/bin:$PATH $ cd ~/outils/esp-open-rtos $ make -C ./examples/template
Cette commande make cherche à compiler notre projet "template" qui est un peu vide, il compilera tous les éléments nécessaire qu'on réutilisera pour les projets développés sous Eclipse.
Pour ajouter le support IPv6, il faut modifier la ligne 725 du fichier ~/outils/esp-open-rtos/lwip/include/lwipopts.h
Code TEXT :
#define LWIP_IPV6 0
par
Code TEXT :
#define LWIP_IPV6 1
(Ou sinon, vous ne touchez par à cette ligne, et allez à la 35e ligne du même fichier et tapez la même ligne :
Code TEXT :
#define LWIP_IPV6 1
Après chaque changement, il faut relancer une compilation des librairies, si le terminal a été fermé entre temps, il faut aussi retaper la commande export.
Le gros de la configuration arrive...
Télécharger Eclipse pour développer en C : "Eclipse IDE for C/C++ Developers"
https://www.eclipse.org/downloads/packages/
Décompressez le dans ~/outils/Eclipse-c
Démarrez le, sélectionner un "workspace" pour notre esp :
~/workspaces/esp
On créer un nouveau projet, on fait un fichier source où on le souhaite, mais il doit y avoir au minimum cette fonction :
main.c
Code C :
#include <stdlib.h> //Si vous souhaitez utilisez uint8_t par exemple #include <espressif/esp_common.h> //plutôt nécessaire #include <esp/uart.h> //Nécessaire si vous souhaitez utiliser les fonctions printf vers la console #include <FreeRTOS.h> //Nécessaire. (C'est un peu le système quoi) #include <task.h> //Nécessaire. (Sinon c'est inutile d'utiliser un système rtos ^^) TaskHandle_t uneTacheHandler; static void uneTache(void *pvParameters) { while(1){ } } void user_init(void) { //Votre code ici xTaskCreate(uneTache, "Une tache", WIFI_STACK_SIZE, NULL, 2, &uneTacheHandler ); }
J'utilise deux scripts, un avant de compiler, un après.
Avant la compilation je fais un make clean et je sauvegarde le code sur internet avec git.
prebuild.sh
Code BASH :
#!/bin/sh #Remove old binaries make clean #update the code online #The script is called from the ./Debug directory cd .. git add . git commit -m "auto update" git push
Après la compilation, je charge le code sur la carte automatiquement. Script fortement inspiré du Makefile des exemples.
postbuild.sh
Code BASH :
#!/bin/sh ## Set the tools path here tool_path=~/outils/esptool gcc_path=~/outils/esp-open-sdk/xtensa-lx106-elf/bin suffix="" # Flash size in megabits # Valid values are same as for esptool.py - 2,4,8,16,32 FLASH_SIZE="4MB" # Flash mode, valid values are same as for esptool.py - qio,qout,dio.dout FLASH_MODE="dio" # Flash speed in MHz, valid values are same as for esptool.py - 80, 40, 26, 20 FLASH_SPEED="40" # firmware tool arguments ESPTOOL_ARGS="-fs ${FLASH_SIZE} -fm ${FLASH_MODE} -ff ${FLASH_SPEED}m" # serial port settings for esptool.py ESPPORT="/dev/ttyUSB0" ESPBAUD="115200" # rboot firmware binary paths for flashing RBOOT_PREBUILT_BIN="${tool_path}/bootloader/firmware_prebuilt/rboot.bin" RBOOT_CONF="${tool_path}/bootloader/firmware_prebuilt/blank_config.bin" RBOOT_ARGS="0x0 ${RBOOT_PREBUILT_BIN} 0x1000 ${RBOOT_CONF}" ## Define project location and name if [ $# == 1 ]; then project_root=$1 debug_loc=${project_root}/Debug project_name=$(echo $1 | sed -e "s/^.*\///") else if [ $(pwd | sed -e "s/^.*\///") == "Debug" ]; then debug_loc=$(pwd) cd ../ project_root=$(pwd) cd ${debug_loc} project_name=$(echo ${project_root} | sed -e "s/^.*\///") else echo -e "\nERROR : no project path given !\n" exit -1 fi fi ## Create the assembly listing .LLS #${gcc_path}/xtensa-lx106-elf-objdump -DS ${debug_loc}/${project_name} > ${debug_loc}/${project_name}.lss ## Create the files python3 ${tool_path}/esptool.py elf2image --version=2 ${ESPTOOL_ARGS} ${debug_loc}/${project_name} ## programm the microcontroller python3 ${tool_path}/esptool.py -p ${ESPPORT} write_flash ${ESPTOOL_ARGS} 0x2000 ${debug_loc}/${project_name}-0x02000.bin
Dans la configuration du projet :
Code TEXT :
C/C++ Build Settings Tool Settings Cross Settings Prefix : xtensa-lx106-elf- Path : /home/UTILISATEUR/outils/esp-open-sdk/xtensa-lx106-elf/bin Cross GCC Compiler Dialect Other Dialect flags : -std=gnu99 Preprocessor Defined symbols (-D) : ICACHE_FLASH Includes Include paths (-I) /home/UTILISATEUR/outils/esp-open-rtos/include /home/UTILISATEUR/outils/esp-open-rtos/libc/xtensa-lx106-elf/include /home/UTILISATEUR/outils/esp-open-rtos/FreeRTOS/Source/include /home/UTILISATEUR/outils/esp-open-rtos/FreeRTOS/Source/portable/esp8266 /home/UTILISATEUR/outils/esp-open-rtos/lwip/lwip/src/include /home/UTILISATEUR/outils/esp-open-rtos/lwip/include /home/UTILISATEUR/outils/esp-open-rtos/lwip/lwip/include/compat/posix /home/UTILISATEUR/outils/esp-open-rtos/lwip/lwip/src/include/lwip /home/UTILISATEUR/outils/esp-open-rtos/core/include /home/UTILISATEUR/outils/esp-open-rtos/open_esplibs/include Optimization Debugging Warnings Miscellaneous Other flags : -c -g -mlongcalls -mtext-section-literals Cross GCC Linker Command line pattern: ${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS} -Wl,-EL -Wl,--no-check-sections -L/home/UTILISATEUR/outils/esp-open-rtos/examples/template/build/sdklib -L/home/UTILISATEUR/outils/esp-open-rtos/lib -u call_user_start -Wl,-static -Wl,-gc-sections -g -O2 -T/home/UTILISATEUR/outils/esp-open-rtos/ld/program.ld -T/home/UTILISATEUR[/outils/esp-open-rtos/ld/rom.ld -L/home/UTILISATEUR/outils/esp-open-rtos/libc/xtensa-lx106-elf/lib -u _printf_float -u _scanf_float -Wl,--whole-archive /home/[b]UTILISATEUR[/b]/outils/esp-open-rtos/examples/template/build/open_esplibs_libmain.a /home/UTILISATEUR/outils/esp-open-rtos/examples/template/build/open_esplibs_libnet80211.a /home/UTILISATEUR/outils/esp-open-rtos/examples/template/build/open_esplibs_libphy.a /home/UTILISATEUR/outils/esp-open-rtos/examples/template/build/open_esplibs_libpp.a /home/UTILISATEUR/outils/esp-open-rtos/examples/template/build/open_esplibs_libwpa.a -Wl,--no-whole-archive -Wl,--start-group /home/UTILISATEUR/outils/esp-open-rtos/examples/template/build/freertos.a /home/UTILISATEUR/outils/esp-open-rtos/examples/template/build/lwip.a /home/UTILISATEUR/outils/esp-open-rtos/examples/template/build/core.a /home/UTILISATEUR/outils/esp-open-rtos/examples/template/build/open_esplibs.a /home/UTILISATEUR/outils/esp-open-rtos/examples/template/build/libgcc.a /home/UTILISATEUR/outils/esp-open-rtos/examples/template/build/libc.a -lhal -lmain -lnet80211 -lphy -lpp -lwpa -Wl,--end-group General No startup or default libs (-nostdlib) Libraries Miscellaneous Linker flags : -Wl,--no-check-sections -u call_user_start -Wl,-static -Wl,-gc-sections -g -u _printf_float -u _scanf_float Shared Library Settings Build Steps Pre-build Command : ${workspace_project_locations}/prebuild.sh Post-build Command : ${workspace_project_locations}/postbuild.sh
C'est tout fini non ?
[CTRL]+[B]
Et ça compile !
Voilà...
Je sais que la configuration est perfectible. J'aurais aimé connaitre des raccourcis pour éviter de donner /home/UTILISATEUR mais d'utiliser une variable de Eclipse qui fonctionnerait, ça éviterai l'édition de ces longues lignes de configuration.
J'aimerais pouvoir compiler les librairies directement avec Eclipse en fonction du projet au lieu de les précompiler avant, car les librairies sont liées aux projets (exemple avec l'IPv6) parfois, souvent lorsqu'il s'agit de modifier des options de FreeRTOS. Il y a bien d'autre raisons de souhaiter de se passer de cette pré-compilation. Même si d'un autre coté, pour des ordinateur moins puissants (eeePC), cela évite de recompiler X fois la même chose (sauf si on ne fait pas de make clean avant la compilation).
Tous retours et améliorations seront les bienvenus !
Amusez vous bien !
Édité par Jybz Le 05/02/2019 à 17h45
Téléverser une image : /wiki/hebergement-de-fichiers-sur-mlo
Arch | Machine | OS |
x86_64 | lenovo x250 | mga9 |
armv7hl | bananapro | mga9 |
aarch64 | Raspberry Pi 4B | mga9 |

funix Membre non connecté
-
- Voir le profil du membre funix
- Inscrit le : 17/12/2012
- Site internet
- Groupes :
Jybz :
Comment-est-ce venu à l'esprit qu'il manquait lib64python-devel ? Surtout "lib64" devant, bien souvent les logiciels sont nomDuLogiciel pour le paquet d'utilisation et nomDuLogiciel-devel pour le paquet de développement.
Comment-est-ce venu à l'esprit qu'il manquait lib64python-devel ? Surtout "lib64" devant, bien souvent les logiciels sont nomDuLogiciel pour le paquet d'utilisation et nomDuLogiciel-devel pour le paquet de développement.
On va dire c'est juste l'expérience, des années de compilation sous linux (et d'autres UNIX like Aix, solaris, HP-UX, et j'en oublie), en fait pkgconfig sert pour la compilation, quand tu installes un package de développement, il installe un fichier .pc sous /usr/lib64/pkgconfig (ou /usr/local/lib/pkconfig), ce fichier va donner des infos standardisées pour pouvoir utiliser le package dans la compil d'un autre logiciel (emplacement des includes, et des infos pour le makefile pour inclure la biblio comme le cflags).
Donc dans la pratique quand tu as lancé ton configure, pour voir si les sources de python étaient bien installés, il a cherché un fichier python.pc sous /usr/lib64/pkgconfig, s'il ne les a pas trouvés c'est qu'elles n'étaient pas installés. tu aurais pu le voir également en consultant le fichier config.log qui se crée après chaque configure.
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie