MIRO est une plate-forme de robot intérieure ouverte. Partie 3 - Composant logiciel: ESP8266

image

Nous commençons à démonter le composant logiciel de la plateforme MIRO. Voyons comment «cuisiner» ARDUINO UNO en utilisant ESP8266 pour le firmware et la communication sans fil.

Table des matières: Partie 1 , Partie 2 , Partie 3 , Partie 4 , Partie 5 .

Je ne voulais pas que nous développions quoi que ce soit pour l'ESP8266. J'étais sûr qu'il y avait longtemps une solution clé en main avec les fonctionnalités dont j'avais besoin. Et pour MIRO, cette fonctionnalité était assez simple:

  1. Le logiciel doit avoir une interface Web pour la configuration du réseau;
  2. Le logiciel doit implémenter le firmware sans fil ATMEGA328;
  3. Le logiciel doit avoir une fonctionnalité de pont WiFi-UART pour le débogage et la gestion sans fil.

image Probablement, pour la plupart de ces fonctions, il y a l' ESP-LINK bien connu. Et il est vraiment puissant. Nous l'avons utilisé dans plusieurs autres projets comme pont entre différentes interfaces - très pratique. Mais il y a quelques mois, lorsque nous nous sommes assis pour traiter de près de cette question, il s'est avéré qu'il ne clignotait pas ARDUINO UNO. Partout ils écrivent qu'ils clignotent, mais il n'a pas clignoté. Et à ce moment-là, je ne comprenais même pas profondément pourquoi et quelle était la procédure standard. Mes camarades et moi venons de configurer un port COM virtuel sur l'hôte à une adresse IP ESP spécifique, indiqué la ligne de réinitialisation dans ESP-LINK lui-même et essayé de la flasher. ATMEGA328 a été réinitialisé avec succès, mais le micrologiciel n'a pas été inondé. De plus, le réseau a un tas de leçons sur l'organisation d'un tel firmware avec ESP-LINK. Mais si vous lisez leur numéro, ils ont toujours là quelque chose que quelqu'un ne flashe pas.

Déçu, il a commencé à chercher des alternatives. Et je l'ai trouvé comme un fork de l' Arduino WiFi original sur GitHub d'un développeur avec le surnom jandrassy.
En février de la même année, il y avait une instruction monstrueuse dans README pour tout configurer, du micrologiciel à l'environnement de développement, mais maintenant, cela a été grandement simplifié. Néanmoins, il faut encore un petit effort pour mettre en place l'environnement. Cependant, le firmware ARDUINO est parfait. Il a été testé à la fois sous Windows et Linux (sur MacOS, nous semblons n'avoir jamais rien testé du tout - personne dans l'environnement immédiat du projet ne l'a).

L'ordre de préparation de l'environnement y est le suivant:

  1. Téléchargez et installez la bibliothèque dfu à partir d'ici ;
  2. Par défaut, dans cette bibliothèque (dans le fichier esp8266-serial-arduinouno-hacked.cpp), il est déclaré que la ligne de réinitialisation de la puce ATMEGA328 est connectée à la ligne GPIO5 ESP8266. Pour MIRO, vous devez apporter des modifications ici - passez à GPIO2.

Que changer exactement
C'était:

esp8266_serial_arduinouno_hacked_target_reset(struct dfu_interface *iface) { pinMode(5, OUTPUT); digitalWrite(5, 0); delay(1); digitalWrite(5, 1); delay(200); return 0; } 

C'est devenu:

 esp8266_serial_arduinouno_hacked_target_reset(struct dfu_interface *iface) { pinMode(2, OUTPUT); digitalWrite(2, 0); delay(1); digitalWrite(2, 1); delay(200); return 0; } 


L'auteur de jandrassy, ​​indique que sa mise en œuvre ne fonctionne qu'avec cette configuration de la puce cible et du chargeur de démarrage (ATMEGA328P avec Optiboot).

Je suis sûr qu'il existe encore des solutions et peut-être même de meilleures. Si quelqu'un connaît avec certitude les options de travail, faites-le moi savoir. Parce que, malgré la grande quantité de code prêt à l'emploi, en plus d'ESP-LINK, nous avons également testé 2 ou 3 projets - ils n'ont pas fonctionné. Dans certains cas, le micrologiciel a été exécuté une fois, dans certains cas, il n'a pas fonctionné du tout.

L'un des principaux avantages de la solution trouvée est peut-être la base de code relativement petite du projet et le fait que le firmware pour Arduino Core est développé.

Ce qui n'était pas dans le projet jandrassy était le pont sans fil WiFi-UART. Déjà dans le firmware Arduino.org WiFi Link d'origine, une page avec une fenêtre de terminal a été coupée, permettant au navigateur de fonctionner avec la puce UART ATMEGA328. Tout comme cela peut être fait dans ESP-LINK. Et si nous nous tournons vers les premières publications sur Arduino UNO WiFi (par exemple, ici ), il est clair que dans les premières versions du firmware, la fenêtre et l'élément de menu correspondant («Console WiFi») le sont. Et même dans la version 1.0.0 de l'archive, le fichier console.js (il vient d'implémenter cette page) se trouve, mais en fait il n'est impliqué en aucune façon dans le serveur (nous avons vérifié). Pourquoi et pourquoi ils l'ont scié n'est pas clair.

Je devais finir quelque chose. Maintenant, il y a un autre serveur dans le firmware - TELNET sur le port évident 23, avec lequel de nombreux programmes de terminaux fonctionnent sans problème.

Cependant, pour le moment, pour que tout fonctionne, j'ai dû supprimer du code jandrassy la partie responsable du firmware sans fil de l'ESP lui-même. Dans les exigences initiales, je n'avais pas cette fonctionnalité, donc d'accord. Cependant, si les lecteurs dans les commentaires peuvent me dire de manière affirmative s'il est possible dans un micrologiciel d'implémenter la possibilité d'un micrologiciel sans fil à la fois de l'ESP8266 lui-même et du MCU «externe» (dans ce cas, ATMEGA328), alors je penserai à retourner cette fonctionnalité au micrologiciel ESP. Déjà dans la préparation de l'article, indirectement, j'en ai vu la confirmation dans cette ébauche de Canadiens. Mais n'a pas vérifié.

En attendant, ESP est flashé exclusivement via un fil, mais ARDUINO a la capacité de communiquer avec le micrologiciel sans fil et les communications TELNET via le pont WiFi-UART. Et c'est très pratique! Mon objectif est atteint.

Eh bien, dans le projet, comme dans l'original, il y a une interface WEB pour les paramètres (les images sont cliquables).





Nous avons changé les fichiers CSS des styles d'interface WEB pour notre projet et introduit une petite "béquille" - maintenant ESP est toujours en mode AP + STA. Cette béquille a été conçue afin d'exclure la possibilité de basculer l'ESP en mode "uniquement STA", dans lequel lors du transfert du robot vers un autre sous-réseau, l'utilisateur perd la possibilité de configurer le robot dans un nouveau réseau - le robot ne peut pas se connecter au nouveau réseau, mais il n'y a pas d'accès externe non plus - Je dois reflasher l'ESP. En mode AP + STA, l'utilisateur peut toujours se connecter au point d'accès du robot et configurer la connexion au nouveau réseau WiFi.

À propos de la façon de flasher ESP8266 avec ce "monstre". En général, pour un module arbitraire sur une puce ESP8266, l'ordre est le suivant:

  1. Allumez la carte (connectez-vous à USB);
  2. Réglez les paramètres de la carte comme sur la figure;

    image

    Il est très important de sélectionner «v1.4 Bande passante supérieure» - si vous sélectionnez «v2», après le firmware, il n'est pas possible de se connecter à la carte via WiFi (le point d'accès est visible, mais la procédure de connexion ne fonctionne pas - qui sait à quoi cela est connecté - écrivez dans les commentaires).
  3. Sélectionnez un port (dans l'exemple de la capture d'écran - COM3).
  4. Exécutez le firmware. Pendant la procédure de chargement de la carte, la mémoire du microcontrôleur est d'abord effacée, puis le micrologiciel est effacé.
  5. Une fois la procédure du micrologiciel terminée, vous devez réinitialiser la carte à l'aide du bouton de réinitialisation.
  6. Sélectionnez Arduino IDE ESP8266 Sketch Data Upload dans le menu et téléchargez SPIFFS.
  7. Réinitialisez la carte.

Pour la configuration avec notre «carte modifiée» UNO + WiFi (voir la première partie ), tout est un peu plus compliqué en raison des caractéristiques matérielles de la carte, ce qui est difficile à étudier confortablement en raison du grand nombre d'erreurs dans le document avec le schéma électrique. Nous avons écrit des instructions plus détaillées dans le fichier «MIRO ESP Firmware upload manual» du référentiel - si vous agissez strictement dessus, le firmware passe 100 sur 100.

Nous arrivons à une partie très intéressante - le composant logiciel MIRO affecté à ATMEGA328. Il y a également plus de travail et d'espace pour discuter de diverses solutions.

Merci à tous!

Source: https://habr.com/ru/post/fr473368/


All Articles