Jai récemment commencé à jouer avec Arduinos pour connecter quelques capteurs. Jai utilisé un Arduino Nano pour mesurer la température, lhumidité, la pression atmosphérique et le niveau de lumière.
Pour stocker les données dans une base de données, jai utilisé un autre Arduino que jai connecté à un Raspberry Pi, et jai laissé les deux Arduinos parler sans fil entre eux via 433 MHz.
Tout fonctionne plutôt bien, mais la communication 433 MHz nest pas exactement la plus fiable (je manque souvent une transmission). Lorsque je suis tombé sur le module ESP8266, cela ma semblé être la solution optimale pour la communication. Ce serait cool si je pouvais simplement extraire les informations via un appel HTTP du Raspberry Pi?
Après avoir joué pendant de nombreuses heures, téléchargé de nombreux firmwares différents, devenant de plus en plus frustré parce que je ne pouvais pas faites-le faire nimporte quoi, je le fais enfin fonctionner via un module FTDI connecté comme ceci:
Jutilise un module dalimentation MB102 pour fournir le 3.3v requis par lESP8266. Il savère que vous devez connecter la terre du MB102 à la terre du module FTDI pour obtenir une réponse appropriée. Après cela, jai pu envoyer des commandes AT et obtenir les réponses appropriées. Je pourrais même le connecter à mon Wifi domestique.
La prochaine chose que je veux faire est de le connecter à lArduino. Jai trouvé un schéma très simple pour cela ( http://blog.huntgang.com/2015/01/20/arduino-esp8266-tutorial-web-server-monitor-example/ ), où vous connectez RX à TX et TX à RX. En utilisant le MB102, je lai connecté comme ceci:
Apparemment, je devrais maintenant pouvoir télécharger un croquis vierge sur lArduino, puis utiliser à nouveau le moniteur série pour détecter la commande AT, exactement de la même manière que je lai fait lors de lutilisation du module FTDI.
Le problème est que je nobtiens rien du tout de cette façon. Je ne vois même pas mes propres commandes AT dans la console. Je vois lESP8266 clignoter chaque fois que jenvoie une commande (je le vois même toujours connecté à mon routeur, il se souvient probablement des informations que jenvoie via le FTDI ..) .?)
La question est, quest-ce que je vais mal? Jai lu quelques articles sur le TX de lArduino étant également 5v et que vous devez faire quelque chose pour le ramener à 3.3v, mais là sont également de nombreux tutoriels qui disent que ce nest pas nécessaire.
Réponse
La façon la plus simple de travailler avec ces appareils est de se connecter à une paire de broches Arduino de rechange et utilisez SoftwareSerial pour communiquer (à moins que vous nutilisiez lun des Arduinos avec plus dun UART). SoftwareSerial fonctionne jusquà 9600 bauds sur les appareils 16 MHz, 4800 sur les appareils 8 MHz, vous aurez donc besoin pour régler lESP8266 pour sadapter à cela. Ils sont actuellement expédiés à 115200 bauds. Vous pouvez utiliser le matériel UART sur les broches (0, 1), mais reprogrammer lArduino signifie déconnecter & reconnecter temporairement lESP à chaque fois, et vieillir assez rapidement.
Voici ce que je fais avec les nouveaux ESP (si vous « avez re-flashé votre ESP, vous devrez dabord télécharger lémulateur de jeu dinstructions AT et le re-flasher avec cela, dabord):
# To configure a new ESP module: # Connect the ESP and the FTDI as in your top diagram, set your # terminal-emulator to 115200 baud, and enter the following: AT # ESP should respond "OK" AT+RST # Resets the ESP AT+UART_DEF=9600,8,1,0,0 # Sets ESP UART: 9600,N,8,1,no flow ctl # Now change the terminal emulator baud rate to 9600 AT+CWMODE=1 # Set ESP to station mode (client) ATE0 # Set ESP"s echo off AT+CWLAP # List access points - after a short pause # the ESP returns a list of WiFi access points
Pour référence future, voici un lien vers le Jeu dinstructions ESP8266 AT .
Mise à jour de juin 2020: le lien ci-dessus a été rompu, maintenant corrigé. Vous pouvez également trouver la documentation sur le compte github de Espressif « (lisible en ligne, mais pas pdf, à partir de cette date).
Commentaires
- Je viens de réaliser que cette question a été extraite de larchive des questions sans réponse dil y a 6 mois . Oh, eh bien – peut-être que cette réponse aidera quelquun dautre maintenant ou bientôt.
Réponse
Il pourrait y avoir un problème avec le débit en bauds de la puce Nano FTDI au RX / TX et à lESP8266. Vous êtes-vous déconnecté lors du téléchargement du croquis?
Pourquoi ne pas essayer ceci à la place?
Cheers!
Commentaires
- Quand je travaille avec lESP8266, cela fonctionne à 115200 bauds, tout le reste donne juste des déchets . Jai ‘ essayé le code du blog lié (en changeant uniquement le débit en bauds), je vois que ‘ envoie la commande à lESP8266 (voyant bleu clignotant), mais il échoue lorsquil tente dexécuter Serial.find ( » > « ). Je ne vois également aucune sortie de lESP8266. Jai déconnecté lESP8266 lors du téléchargement.
Réponse
Je suis tombé sur un bon tutoriel ici, jai essayé et il fait le travail: https://blogs.msdn.microsoft.com/abhinaba/2016/01/23/esp8266-wifi-with-arduino-uno-and-nano/
Commentaires
- Cela fonctionnera sauf pour la commande CIOBAUD qui a été remplacée.La commande actuelle pour toutes les fonctions UART est:
AT+UART_DEF=<baud>,<databits>,<stopbits>,<parity>,<flowcontrol>
, ouAT+UART_DEF-9600,8,1,0,0
pour être compatible avec SoftwareSerial. Remplacez » _DEF » par » _CUR » si ce changement concerne uniquement la session; la première commande en fait la valeur par défaut à la mise sous tension. - Pouvez-vous développer les informations de ce blog dans cette réponse si le lien meurt, mais aussi pour en faire une meilleure réponse
Réponse
Oui, si vous utilisez des sources d’alimentation différentes, les terres doivent toujours être connectées, sinon les cartes ne savent pas quoi zéro volts est.
Le TX de lArduino est 5v, vous avez besoin dun shifter de niveau pour convertir 5v en 3,3v, quelque chose comme ça ( https://shop.pimoroni.com/products/adafruit-4-channel-i2c-safe-bi-directional-logic-level-converter?utm_medium=cpc&utm_source=googlepla&variant=302017581&gclid=CPqujsPxlc0CFcYcGwodb8YIoA )
Le TX de lESP8266 est de 3,3 V et le RX de lArduino est de 5 V et vous aurez besoin dun sélecteur de niveau pour gérer cela. Vous pouvez utilisez le même que celui indiqué ci-dessus, car il peut convertir 4 signaux hauts (5v) en 4 signaux bas (3,3v).
Les gens disent que vous pouvez le faire avec des résistances, mais jai aussi lu quils ne fonctionnent pas assez bien pour gérer les signaux numériques à commutation rapide (donc 300 bauds sur votre série pourraient être OK, mais pas 115000 :))
Les gens a Disons aussi que vous navez pas besoin de convertisseurs de niveau. Ce sont de vraies choses pourraient fonctionner pendant un certain temps sans elles, mais tôt ou tard quelque chose va éclater. Augmenter la tension accélérera le processus afin que vous puissiez imaginer ce qui se passera si vous connectez une alimentation 230V directement à un périphérique USB.
Un dernier point, savez-vous que lESP8266 est un processeur 80/160 MHz avec 256 Ko de RAM, quand vous comparez cela à vous Arduino, cest comme programmer votre PC via votre téléphone. vous pouvez essayer de connecter lESP8266 via un module FTDI et de le programmer via lIDE Arduino dans Arduino C. Cest beaucoup plus facile que tout ce truc de connexion.