GNU/Linux >> Tutoriels Linux >  >> Linux

Développer des applications réseau pour ESP8266 à l'aide de Mongoose sous Linux

Parlons de la façon de commencer à développer des applications réseau pour la puce ESP8266 en utilisant Mongoose Embedded Web Server sous Linux. J'utiliserai Ubuntu, mais tout peut être facilement adapté à n'importe quelle distribution Linux.

Qui est qui

Depuis que vous avez commencé à lire cet article, je suppose que vous connaissez Linux, ESP8266 et Mongoose. Alors seulement une courte introduction.

ESP8266

Puce pas chère avec WiFi intégré, développée par Expressif. Si vous souhaitez plonger plus en détail, consultez le site officiel.

Mangouste

Mongoose est une bibliothèque multi-protocoles complète avec un noyau de moins de 40 Ko développée par Cesanta. Retrouvez les informations mode à ce sujet sur le site de Cesanta.

Linux

Vraiment? :-)

Connecter ESP8266 à votre ordinateur

Ok, la première chose que nous devons faire est de connecter la puce ESP8266 à votre ordinateur. Vous pouvez le faire de plusieurs manières.

NodeMCU

Si vous avez un module NodeMCU, avec un convertisseur UART-USB intégré, tout ce que vous avez à faire est de connecter le module à l'ordinateur via USB. BAISER !

Connexion avec un convertisseur UART-USB externe

Si votre module ESP n'a pas de convertisseur UART-USB interne, vous en avez besoin d'un externe. Il y en a des tonnes - il suffit de chercher sur Google.

Sélectionnez-en un qui fonctionne avec Linux (en gros, la plupart d'entre eux) et qui a une broche 3,3 V et rappelez-vous :la plupart des convertisseurs UART-USB ont des broches pour 3,3 V et 5 V, mais vous ne devez pas connecter ESP aux broches 5 V. Cet appareil n'est pas tolérant à la tension et il est possible de griller votre module.

Connectez-vous maintenant (ESP -> Convertisseur):

VCC -> 3.3V

Terre -> Terre

RX0 -> TX (pas RX)

TX0 -> RX

CH_PD -> 3.3V

Connexion avec Arduino

Si vous n'avez pas de convertisseur UART-USB, mais que vous avez Arduino avec des broches 3,3 V, vous pouvez facilement l'utiliser pour connecter ESP :

  1. Connecter Arduino à l'ordinateur via USB
  2. Connectez le RESET d'Arduino à son GND :il est nécessaire de désactiver le processeur hôte, car nous n'avons besoin que du module UART-USB
  3. Connecter ESP (ESP -> Arduino)
    1. VCC -> 3,3 V
    2. GND -> GND
    3. RX0 -> RX0 (pas TX)
    4. TX0 -> TX
    5. CH_PD -> 3,3 V

Vérifier la connexion

Si votre connexion est correcte, ESP devrait apparaître comme un nouveau périphérique tty. Habituellement, NodeMCU et ESP connectés via un convertisseur UART-USB apparaissent comme /dev/ttyUSBx (x =0, 1, 2 etc) et la version d'Arduino apparaît comme /dev/ttyACMx (x =0, 1, 2 etc)

Vous pouvez utiliser la commande dmesg | grep usb pour trouver votre appareil.

Par exemple, après la connexion de NodeMCU, vous verrez quelque chose comme ça :

 

[  1496.765417] usb 2-3.3: new full-speed USB device number 15 using xhci_hcd
[ 1496.867729] usb 2-3.3: New USB device found, idVendor=10c4, idProduct=ea60
[ 1496.867736] usb 2-3.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1496.867740] usb 2-3.3: Product: CP2102 USB to UART Bridge Controller
[ 1496.867743] usb 2-3.3: Manufacturer: Silicon Labs
[ 1496.867745] usb 2-3.3: SerialNumber: 4202
[ 1497.900384] usbcore: registered new interface driver usbserial
[ 1497.900423] usbcore: registered new interface driver usbserial_generic
[ 1497.900457] usbserial: USB Serial support registered for generic
[ 1497.903897] usbcore: registered new interface driver cp210x
[ 1497.903989] usbserial: USB Serial support registered for cp210x
[ 1497.904382] usb 2-3.3: cp210x converter now attached to ttyUSB0

Comme vous pouvez le voir, NodeMCU est maintenant disponible en tant que /dev/ttyUSB0 .

Pour  vérification finale, utilisez n'importe quel terminal pour vous connecter à un nouvel appareil ; Je vais utiliser picocom. Il s'agit d'un terminal léger. Dans Ubuntu, il peut être installé avec : 

sudo apt install picocom

Essayer :

picocom /dev/ttyUSB0 -b 115200

Si tout va bien, vous devriez voir "Terminal prêt ” dans la sortie picocom.

Correction de l'erreur "Accès refusé"

Si picocom indique "Accès refusé", cela signifie généralement que l'utilisateur actuel n'est pas membre de la dialout groupe :sous Linux, pour accéder aux ports série, l'utilisateur doit être membre de ce groupe.

Exécuter :

sudo usermod -aG docker $USER

commande, déconnectez-vous, reconnectez-vous et essayez de reconnecter ESP. "Accès refusé" devrait disparaître.

Construire la Mangouste

Téléchargez la dernière version de Mongoose à partir d'ici.

Mongoose est livré avec un exemple pour ESP8266 et RTOS SDK. Il se trouve ici dans GitHub.

Remarque :ESP8266 a deux versions de SDK. Le premier est un non-OS et le second est basé sur RTOS. Dans cet article, j'utiliserai ce dernier. Pour trouver les différences entre eux, recherchez sur Google ou lisez cette réponse sur le forum officiel.

Pour construire l'exemple, vous avez deux options :

  1. Utiliser Docker et des images Docker prêtes à l'emploi
  2. Installez le SDK et la chaîne d'outils sur votre ordinateur

Utiliser Docker

C'est plus simple et je crois que c'est la meilleure façon. Les images docker de Cesanta contiennent tout ce dont vous avez besoin pour créer Mongoose pour ESP (et pas seulement Mongoose uniquement - n'importe quelle application ESP). Ainsi, vous n'avez pas besoin d'installer des éléments localement et vous pouvez facilement partager votre code avec des amis et des collègues afin qu'ils puissent créer votre micrologiciel et obtenir exactement le même résultat.

Le guide d'installation du docker est disponible ici. Essayez, c'est vraiment simple, il vous suffit d'ajouter le référentiel docker à votre Linux et de l'installer comme un programme habituel avec apt .

Une fois docker installé, allez dans le dossier mongoose/examples/ESP8266_RTOS et exécutez build.sh

Lors de la première construction, Docker téléchargera l'image requise. Cela peut prendre un certain temps, selon votre canal Internet. Mais, une fois que build.sh est terminé dans le dossier ./bin, vous trouverez deux fichiers .bin.

C'est le micrologiciel. Vous l'avez fait !

Utilisation du SDK local

Si docker est trop simple pour vous ou pour une raison quelconque vous souhaitez utiliser des outils installés localement, vous pouvez également le faire.

C'est un peu plus dur et ennuyeux, mais rien de trop compliqué. Surtout, étant donné que Cesanta a créé des outils pour vous et que vous n'avez pas besoin de les créer à partir de la source.

Voici comment cela fonctionne :

  1. Clonez le SDK ESP RTOS à partir de ce référentiel. L'exemple de makefile le recherche dans le dossier /opt/ESP8266_RTOS_SDK. Ainsi, vous pouvez soit placer un référentiel cloné dans ce dossier, soit modifier le chemin d'accès avant de créer l'exemple (voir ci-dessous).
  2. Téléchargez xtensa-lx106-elf.tar.bz2 depuis ce dossier public.
  3. Décompressez le fichier xtensa-lx106-elf.tar.bz2. Par exemple, vers le dossier /opt :

    sudo tar -xvf xtensa-lx106-elf.tar.bz2 -C /opt

  4. Modifiez votre variable PATH, par exemple, si vous avez décompressé la chaîne d'outils dans le dossier /opt, utilisez la commande suivante :

    export PATH=/opt /xtensa-lx106-elf/bin:$PATH

(Je vous recommande également d'ajouter cette commande à vos dossiers .bashrc ou .profile, pour conserver les modifications après le redémarrage du système)

Exécutez maintenant :

$ export SDK_PATH=/opt/ESP8266_RTOS_SDK  # Put your path to SDK here
$ export BIN_PATH=./bin; mkdir ./bin
$ make clean; make BOOT=none APP=0 SPI_SPEED=40 SPI_MODE=dio SPI_SIZE_MAP=0

Et maintenant, si tout est installé correctement, vous aurez le firmware dans ./bin dossier

Vous l'avez encore fait !

ESP clignotant

Il existe de nombreux outils disponibles pour flasher ESP8266. Nous allons utiliser esptool . Pour l'utiliser, clonez ce dépôt et ajoutez le chemin vers esptool.py dans votre variable PATH (c'est facultatif et juste pratique).

Maintenant, déconnectez picocom, s'il est toujours connecté (Astuce :appuyez sur Ctrl+A ; Ctrl+D pour en sortir) et exécutez :

esptool.py --port /dev/ttyUSB0 --baud 230400 \
   write_flash --flash_mode=dio --flash_size=4m \
   0x00000 ${BIN_PATH}/eagle.flash.bin \
   0x20000 ${BIN_PATH}/eagle.irom0text.bin \
   0x7e000 ${SDK_PATH}/bin/esp_init_data_default.bin

Remarque importante : si votre module n'est pas un NodeMCU, vous devez mettre à la terre GPIO0 avant de clignoter (la mise à la terre de GPIO0 fait passer le module en mode clignotant). Après avoir clignoté, déconnectez GPIO0 de la masse et redémarrez ESP.

Si aucune erreur ne s'est produite, vous verrez le résultat comme ceci :

Connecting...

Erasing flash...

Took 0.58s to erase flash block

Wrote 35840 bytes at 0x00000000 in 1.8 seconds (157.5 kbit/s)...

Erasing flash...

Took 2.02s to erase flash block

Wrote 301056 bytes at 0x00020000 in 15.4 seconds (156.7 kbit/s)...

Erasing flash...

Took 0.11s to erase flash block

Wrote 1024 bytes at 0x0007e000 in 0.1 seconds (163.5 kbit/s)...

Leaving…

Prêt! Maintenant, l'appareil est flashé avec votre firmware.

Premiers résultats

Vous devriez maintenant voir apparaître un réseau WiFi "Mongoose". L'exemple configure un point d'accès. Utilisez le mot de passe "Mongoose" pour vous connecter, puis accédez à http://192.168.4.1/, et vous verrez une page d'accueil "Hello, world".

Toutes nos félicitations! Vous venez d'exécuter Web Server sur ESP8266 !

Étapes suivantes

Les prochaines étapes dépendent de vous. Vous pouvez utiliser l'exemple décrit comme point de départ.

Regardez son user_main.c dossier. Il configure un point d'accès WiFi et démarre le serveur Web. Vous pouvez facilement changer le mode AP en mode station (et vous connecter à votre réseau WiFi) et utiliser l'API Mongoose pour implémenter ce que vous voulez. C'est une façon courante d'utiliser Mongoose, vous pouvez donc utiliser un autre exemple Mongoose pour créer votre programme et avoir http, tcp, udp, mqtt et bien d'autres fonctionnalités sur votre appareil ESP.

Utilisez les documents Espressif (par exemple celui-ci) pour apprendre à régler le module WiFi ESP8266 (et pas uniquement le WiFi) et la documentation Mongoose pour découvrir les fonctionnalités de Mongoose.

Les punks ne sont pas morts !


Linux
  1. Conseils Linux pour utiliser cron pour planifier des tâches

  2. Utilisation d'AppImage pour la gestion des packages Linux

  3. Comment empaqueter des applications Python pour Linux

  4. 10 commandes Linux pour les diagnostics réseau

  5. Utilisation de l'outil SS pour le dépannage du réseau

Comment limiter la bande passante réseau sous Linux à l'aide de Wondershaper

Afficher les informations réseau sous Linux à l'aide de What IP Tool

Créer une clé USB amorçable persistante à l'aide de Ventoy sous Linux

Utilisation d'ifstat pour les statistiques réseau Linux

DEFT Linux Une distribution Linux pour l'informatique judiciaire

Comment développer des applications OpenGL ES (GLES) 2.0 sous Linux ?