30-11-2016, 00:09
Witam,
od dłuższego czasu zmagam się z dość dziwnym problem, a mianowicie problemem z komunikacją z ESP8266 przez Arduino Uno. Sam moduł spisuje się jak najbardziej ok, jeśli jest podłączony przez USB-UART. Mogę spokojnie poustawiać sobie tryby przez komunikację AT-Commands, postawić serwer oraz się z nim skomunikować.
Niestety problem jest, gdy chcę zrobić to samo przez Arduino Uno i bibliotekę SoftwareSerial.h. Napisałem prosty program, który wykonał się poprawnie tylko raz i to dzisiaj, ku mojemu zdziwieniu (nawet nie jestem w stanie powiedzieć co wpłynęło na jego zadziałanie), jednak po wyłączeniu i włączeniu zasilania problem pojawił się ponownie. Dla jednej kompilacji programu wykonuje się tylko jedna komenda AT, pierwsza z góry. Następne nie są wykonywane. Całość wygląda tak, jakby:
a) SoftwareSerial się zmroził po wykonaniu jednej komendy i nie przesyłał ich więcej (jednak po dodaniu funkcji odczytującej w loopie, co widać na screenie, SoftwareSerial nasłuchuje)
b) Co bardziej prawdopodobne, moduł ESP dostał jakiegoś zmrożenia po otrzymaniu pierwszej komendy i nie chciał dalej się wykonywać i co najgorsze, nie wiem co może być tym spowodowane. Brak pamięci?
Całość podłączenia wygląda następująco:
ESP
VCC - 3,3 V (Z zasilacza 9V, 0,6A przez stabilizator LF33CV, dwa kondensatory przy stabilizatorze, wejściowy 10uF, wyjściowy 4,7uF)
GND - GND
TX - RX (arduino pin 7)
RX - TX (arduino pin 8 przez dzielnik napięciowy do zmniejszenia napięcia 3,3V)
CH_PD - 3,3V
RST - 3,3V (ale akurat tu bez różnicy czy jest podłączony czy nie, w obu przypadkach nie działa)
Wgrana wersja oprogramowania:
AT version:0.21.0.0
SDK version:0.9.5
Wiem, że wersja nie jest najnowsza, jednak próbowałem już z innymi i niestety też się nie udawało. Co więcej, nowsze wersje nie działają domyślnie na 9600 baud, a po zmianie programowej z 115200 na 9600 moduł zaczynał szaleć.
Męczę się z tym problemem już od paru dni i naprawdę nie wiem co może być nie tak, tym bardziej, że tak jak wspomniałem, dzisiaj układ wyjątkowo i jednorazowo zaskoczył (screen również poniżej). Próbowałem już chyba wszystkiego, dodawałem delay'e pomiędzy linijki, zmieniałem piny dla SoftwareSerialu....
Już na sam koniec chciałbym dodać, że projekt który chciałbym wykonać wiąże się z postawieniem serwera i wysyłaniem danych z komputera do ESP8266, a następnie na atmegę gdzie następować będzie sterowanie silnikiem. Dlatego jeśli jest inny sposób na napisanie programu niż z wykorzystaniem komend AT, to byłbym wdzięczny za wskazówki, gdyż jestem laikiem w tych sprawach.
Tak wygląda nie działający kod:
Tak wyglądał ten jeden raz kiedy działało:
od dłuższego czasu zmagam się z dość dziwnym problem, a mianowicie problemem z komunikacją z ESP8266 przez Arduino Uno. Sam moduł spisuje się jak najbardziej ok, jeśli jest podłączony przez USB-UART. Mogę spokojnie poustawiać sobie tryby przez komunikację AT-Commands, postawić serwer oraz się z nim skomunikować.
Niestety problem jest, gdy chcę zrobić to samo przez Arduino Uno i bibliotekę SoftwareSerial.h. Napisałem prosty program, który wykonał się poprawnie tylko raz i to dzisiaj, ku mojemu zdziwieniu (nawet nie jestem w stanie powiedzieć co wpłynęło na jego zadziałanie), jednak po wyłączeniu i włączeniu zasilania problem pojawił się ponownie. Dla jednej kompilacji programu wykonuje się tylko jedna komenda AT, pierwsza z góry. Następne nie są wykonywane. Całość wygląda tak, jakby:
a) SoftwareSerial się zmroził po wykonaniu jednej komendy i nie przesyłał ich więcej (jednak po dodaniu funkcji odczytującej w loopie, co widać na screenie, SoftwareSerial nasłuchuje)
b) Co bardziej prawdopodobne, moduł ESP dostał jakiegoś zmrożenia po otrzymaniu pierwszej komendy i nie chciał dalej się wykonywać i co najgorsze, nie wiem co może być tym spowodowane. Brak pamięci?
Całość podłączenia wygląda następująco:
ESP
VCC - 3,3 V (Z zasilacza 9V, 0,6A przez stabilizator LF33CV, dwa kondensatory przy stabilizatorze, wejściowy 10uF, wyjściowy 4,7uF)
GND - GND
TX - RX (arduino pin 7)
RX - TX (arduino pin 8 przez dzielnik napięciowy do zmniejszenia napięcia 3,3V)
CH_PD - 3,3V
RST - 3,3V (ale akurat tu bez różnicy czy jest podłączony czy nie, w obu przypadkach nie działa)
Wgrana wersja oprogramowania:
AT version:0.21.0.0
SDK version:0.9.5
Wiem, że wersja nie jest najnowsza, jednak próbowałem już z innymi i niestety też się nie udawało. Co więcej, nowsze wersje nie działają domyślnie na 9600 baud, a po zmianie programowej z 115200 na 9600 moduł zaczynał szaleć.
Męczę się z tym problemem już od paru dni i naprawdę nie wiem co może być nie tak, tym bardziej, że tak jak wspomniałem, dzisiaj układ wyjątkowo i jednorazowo zaskoczył (screen również poniżej). Próbowałem już chyba wszystkiego, dodawałem delay'e pomiędzy linijki, zmieniałem piny dla SoftwareSerialu....
Już na sam koniec chciałbym dodać, że projekt który chciałbym wykonać wiąże się z postawieniem serwera i wysyłaniem danych z komputera do ESP8266, a następnie na atmegę gdzie następować będzie sterowanie silnikiem. Dlatego jeśli jest inny sposób na napisanie programu niż z wykorzystaniem komend AT, to byłbym wdzięczny za wskazówki, gdyż jestem laikiem w tych sprawach.
Tak wygląda nie działający kod:
Tak wyglądał ten jeden raz kiedy działało: