Kérdés:
esp8266 szemetet csak a SoftwareSerial használatakor
Mercury
2015-10-26 03:16:09 UTC
view on stackexchange narkive permalink

Az esp8266-ot próbálom működtetni. Amikor az RX + TX csapokat az Arduino 1 + 2 csapjaihoz csatlakoztatom, minden rendben működik. de amikor megpróbálom használni a szoftveres soros szoftvert, akkor a pokol elszabadul, és a kapott adatokat elrontják (úgy tűnik, minden rendben van, de nem tudom elolvasni a kimeneti adatokat ... még érdekesebb, a kimenet nem következetes!

példa:

  #include <SoftwareSerial.h>SoftwareSerial esp8266 (11, 10); // RX, TXvoid setup () {// tegye ide a telepítési kódot, hogy egyszer fusson: esp8266.begin (19200); Serial.begin (115200);} void loop () {esp8266.write ("AT \ r \ n"); String puffer; Serial.print ("SENDING AT ..."); (uint64_t time = millis (); (idő + 1000) > millis ();) for (; esp8266.available (); buffer + = (char) esp8266.read ()); buffer.replace ("\ r \ n" , ""); Serial.println ("VÁLASZ:" + puffer);}  

És a kimenet: enter image description here

Megpróbáltam megváltoztatni a SerialMonitor adatátviteli sebességét, a bemeneti tűket, de az eredmények ugyanazok.

Nemrég megváltoztattam az MCU-t (uno) egy másikra, sőt egy másik esp modulra egy másikról. supplie r, még mindig ugyanazokat az eredményeket kapom! Nem lehetek az első, aki ilyen jelenségekkel találkozik ...

A szoftveres szoftvernek nyilvánvalóan problémái vannak 115kbps sebességgel. Ez segített szünetet tartani az espSerial.read () között; 50–100 késéssel ...
Három válaszokat:
chris
2015-10-28 14:48:16 UTC
view on stackexchange narkive permalink

Csökkentse a SoftwareSerial kapcsolati sebességet 19200-ra. Vagyis esp8266.begin (19200). 115200 ez az abszolút max., Amelyet a SoftwareSerial elméletileg képes kezelni. Ha nem is használja az összes változtatás megszakítótűt az MCU-ján (Uno / Nano?), Akkor a 3, 2 helyett használja a 10, 11, 12 vagy 13 bármelyikét // RX, TX. Nem biztos a sendCommand funkcióban. Ha csak tesztelni szeretné a kapcsolatot, akkor annak olyan egyszerűnek kell lennie, mint:

  SoftwareSerial esp8266 (10, 11); // RX, TX elkerülje a beállítást () {esp8266.begin (19200); Serial.begin (115200); char puffer [50]; esp8266.write ("AT \ r \ n"); esp8266.readBytes (puffer, sizeof (puffer)); Serial.println (puffer); ...}  

Nyilvánvaló, hogy ha weblapokat kell nyitnia és válaszokat kapnia, akkor szükség lesz egy libary-ra az IDP + adatok kezeléséhez. Kis kényszerítéssel megkaptam az Adafruit_ESP8266.h szoftvert a SoftwareSerial használatával.

Ez jó ötlet. Próbálja meg használni ezeket a megszakító csapokat
Megpróbálta a fentieket, még mindig ugyanazt a szemetet kapta ...
Gyanítom, hogy módosítania kell az ESP-8266 adatátviteli sebességét. Általában az alapértelmezett értéke 115200. A http://neilkolban.com/tech/wiring-up-esp8266s fájlt használtam a terminálemulátor használatának megkezdéséhez, majd felvillantottam a legújabb AT firmware-t, és az átviteli sebességet 19200-ra változtattam az AT + UART_DEF = 19200 használatával. , 8,1,0,0. Úgy tűnt, hogy a felhőn keresztüli frissítés is rendben van, miután beállítottam az AP ssid & pwd-t. Vegye figyelembe, hogy az AT + CIUPDATE használatakor eltart egy ideig.
Sherin Mathew
2015-10-29 14:59:56 UTC
view on stackexchange narkive permalink

Gyors kipróbálható dolog.

Próbálja meg megváltoztatni a Serial.begin (115200); értéket Serial.begin (9600); értékre, és hagyja az esp8266.begin (115200) parancsot; .

Én is teljesen új vagyok az Arduino számára, de emlékszem, hogy láttam a szemetet, amikor a soros monitor adatátviteli sebességét más értékre állítottuk, mint az Arduino átviteli sebességét.

Arduino Uno-t használtam, és ha az átviteli sebességet egy másik 9600-as értékre állítottam a soros ablakban, akkor a println függvényhívásokban láttam a szemétértékeket.

azaz Set Serial.Begin (9600); és a soros Montior átviteli sebesség is 9600 .

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

Tapasztalatom szerint, ha következetes adatátvitelt szeretne elérni a szoftvercsomagon keresztül, akkor le kell tiltania (Arduino nyelven) a globális megszakítást az átvitel idejére. A globális megszakítások letiltásához használja a cli () parancsot, az ismételt engedélyezéshez használja a sei () parancsot.

Kipróbáltam ezt, és nem javultam. Akkor már nem működött a küldés ...


Ezt a kérdést és választ automatikusan lefordították angol nyelvről.Az eredeti tartalom elérhető a stackexchange oldalon, amelyet köszönünk az cc by-sa 3.0 licencért, amely alatt terjesztik.
Loading...