Question:
esp8266 garbage out uniquement lors de l'utilisation de SoftwareSerial
Mercury
2015-10-26 03:16:09 UTC
view on stackexchange narkive permalink

J'essaye de faire fonctionner l'esp8266. Lorsque je connecte les broches RX + TX aux broches 1 + 2 de l'Arduino, tout fonctionne bien. mais quand j'essaie d'utiliser le logiciel série, tout l'enfer se déchaîne et les données reçues sont garbadeged (il semble que tout va bien mais je ne peux pas lire les données de sortie ... plus intéressant, la sortie n'est pas cohérente!

exemple:

  #include <SoftwareSerial.h>SoftwareSerial esp8266 (11, 10); // RX, TXvoid setup () {// mettez votre code de configuration ici, à exécuter une fois: esp8266.begin (19200); Serial.begin (115200);} void loop () {esp8266.write ("AT \ r \ n"); String buffer; Serial.print ("SENDING AT ..."); for (uint64_t time = millis (); (time + 1000) > millis ();) for (; esp8266.available (); buffer + = (char) esp8266.read ()); buffer.replace ("\ r \ n" , ""); Serial.println ("RESPONSE:" + buffer);}  

Et la sortie: enter image description here

J'ai essayé de changer le débit en bauds de SerialMonitor, les broches d'entrée, mais les résultats sont tous les mêmes.

J'ai récemment changé le MCU (uno) en un module esp différent et même différent d'un autre supplie r, j'obtiens toujours les mêmes résultats! Je ne peux pas être le premier à rencontrer de tels phénomènes ...

softwareserial a évidemment des problèmes fonctionnant à 115kbps, cela m'a aidé à faire une pause entre espSerial.read (); avec un retard de 50 à 100 ...
Trois réponses:
chris
2015-10-28 14:48:16 UTC
view on stackexchange narkive permalink

Essayez de réduire la vitesse de connexion SoftwareSerial à 19200. Ie, esp8266.begin (19200). 115200 c'est le maximum absolu que SoftwareSerial peut théoriquement gérer.De plus, si vous n'utilisez pas toutes les broches d'interruption de changement sur votre MCU (Uno / Nano?), Utilisez 2 broches de 10, 11, 12 ou 13 au lieu de 3, 2 // RX, TX. Pas sûr de la fonction sendCommand. Si vous voulez juste tester la connexion, cela devrait être aussi simple que:

  SoftwareSerial esp8266 (10, 11); // RX, TXvoid setup () {esp8266.begin (19200); Serial.begin (115200); tampon de caractères [50]; esp8266.write ("AT \ r \ n"); esp8266.readBytes (tampon, taille de (tampon)); Serial.println (buffer); ...}  

Évidemment, une fois que vous avez besoin d'ouvrir des pages Web et de recevoir des réponses, vous aurez besoin d'une bibliothèque pour gérer les données IDP +. Avec un peu de coercition, Adafruit_ESP8266.h travaille avec SoftwareSerial.

C'est une bonne idée. Essayez d'utiliser ces broches d'interruption
J'ai essayé tout ce qui précède, en obtenant toujours les mêmes déchets ...
Je suppose que vous devrez peut-être changer la vitesse de transmission de l'ESP-8266. La valeur par défaut est généralement 115200. J'ai utilisé http://neilkolban.com/tech/wiring-up-esp8266s pour démarrer avec un émulateur de terminal, puis j'ai flashé le dernier micrologiciel AT et changé la vitesse de transmission à 19200 en utilisant AT + UART_DEF = 19200 , 8,1,0,0. De plus, la mise à jour via le cloud a semblé fonctionner correctement pour moi une fois que j'ai défini le ssid et le pwd AP. Notez que l'utilisation de AT + CIUPDATE prend un certain temps.
Sherin Mathew
2015-10-29 14:59:56 UTC
view on stackexchange narkive permalink

Une chose rapide à essayer.

Essayez de remplacer Serial.begin (115200); par Serial.begin (9600); et laissez esp8266.begin (115200); .

Je suis également complètement nouveau sur Arduino, mais je me souviens avoir vu les valeurs indésirables lorsque le débit en bauds du moniteur série est réglé sur une valeur différente de celle de l'Arduino.

J'utilisais Arduino Uno et si je définissais le débit en bauds sur une valeur autre 9600 dans la fenêtre série, je voyais des valeurs indésirables dans les appels de fonction println.

ie Set Serial.Begin (9600); et le débit en bauds Serial Montior également 9600 .

gosewski
2016-02-28 06:50:38 UTC
view on stackexchange narkive permalink

D'après mon expérience, si vous souhaitez avoir un transfert de données cohérent sur la série logicielle, vous devez désactiver (dans Arduino) les interruptions globales pour le temps de transmission. Pour désactiver les interruptions globales, utilisez la commande cli (), pour la réactiver, utilisez la commande sei ().

J'ai essayé cela et je ne me suis pas amélioré. Aucun envoi ne fonctionnait plus alors ...


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...