Skocz do zawartości

Komendy AT z poziomu Arduino Uno R3


eunectees

Pomocna odpowiedź

Cześć,

 

Mam problem z połączeniem Arduino z modułem ESP8266 ESP-01s. Komendy wysyłane przez Arduno wyświetlają się w monitorze portu szeregowego, ale nie idą do ESP.

Sposób podłączenia:

  • TX na ESP8266 do TX na Arduino Uno
  • RX na ESP8266 do RX na Arduino Uno
  • EN na ESP8266 do 3,3 V na Arduino Uno
  • 3v3 (lub VCC) na ESP8266 do 3,3 V na Arduino Uno
  • GND na ESP8266 do GND na Arduino Uno

 

Gdy uruchomię pusty program bez żadnego kodu, to mogę komunikować się z ESP poprzez komendy AT z poziomu monitora portu szeregowego i wszystko działa. Jednak gdy, uruchomię poniższy kod, komendy nie są przesyłane z Arduino do ESP, oraz te wpisane już w monitorze portu szeregowego też nie działają. Cały czas dostaję błąd komunikacji. 

Macie pomysł w czym leży tu problem? 

 

void setup() {

  Serial.begin(115200);

  while (!wyslij("AT", "OK", 1000))
  {
    Serial.println("Błąd komunikacji");
    delay(1000);
  }

  Serial.print("Rozpoczęto komunikację");

  if (wyslij("AT+CWMODE=1", "Ok", 200))
    Serial.println("CWMODE - OK");
  if (wyslij("AT+CIPMODE=0", "Ok", 200))
    Serial.println("CIPMODE - OK");
  if (wyslij("AT+CIPMUX=1", "Ok", 1200))
    Serial.println("CIPMUX - OK");

  if (wyslij("AT+CWJAP=test", "OK", 5000))
    Serial.println("Połączono z siecią");

  if (wyslij("AT+CIPSERVER=1,1221", "OK", 1000))
    Serial.println("Uruchomion serwer");

  Serial.println("AT+SIFSR");
  Serial.println(Serial.readString());
}

void loop() {}

boolean wyslij(String Komenda_AT, char *Odpowiedz_AT, int czas_czekania)
{
  Serial.println(Komenda_AT);
  delay(czas_czekania);
  while (Serial.available() > 0)
  {
    Serial.println(Serial.available());
    if (Serial.find(Odpowiedz_AT))
      return true;
  }
  return false;
}

 

Link do komentarza
Share on other sites

Musisz zrobić krosa TX z RX podłączenie tx do tx i rx do rx nie zadziała 

No i baudrate w esp, bo nie wiem jaka tam jest prędkość domyślna. W terminalu działa na 115200?

Edytowano przez _LM_
Link do komentarza
Share on other sites

Piny UNO masz podłączone do konwertera USB by wysyłać dane do komputera. Nie powinieneś używać jednocześnie tych pinów do komunikacji z ESP, komunikacja UART jest do połączeń 1:1, a nie 1:wielu, a w szczególności wielu:1, jedno urządzenie stara się wystawić 1, drugie 0 i robisz zwarcie na linii, możesz uszkodzić urządzenia. Użyj biblioteki softSerial i np. pinów 2 i 3 do komunikacji z ESP.

Jak chcesz by program wysyłał coś do ESP i mieć taką możliwość z terminala to w programie odczytane dane z Serial przesyłasz na softSerial i na odwrót.

Można ewentualnie UNO użyć jako konwertera USB-UART, wtedy po pierwsze ustawia się uno kablem w stan RESET na stałe, wtedy piny RX/TX nie wymuszają żadnego stanu na linii. Podłączasz TX do TX i RX do RX, bo pin TX Uno jest jednocześnie pinem RX konwertera USB w UNO, odpowiednio RX Uno jest pinem TX konwertera. Można wtedy komendy AT wysyłać z terminala do ESP jak zwykłym, osobnym konwerterem USB-UART.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

(edytowany)

Rzeczywiście przełączenie pinów pomogło. Jednak nie jest mi potrzebne aż tak wysyłanie poleceń z terminala jeśli działają z arduino więc przeszedłem z powrotem na 0, 1, ESP ładnie łączy się z siecią. 

Jednak mam jeszcze problem z przesłaniem zapytania GET. Próbuję wysłać dane na stronie, gdzie odbieram je i zapisuję w bazie. Docelowo arduino będzie wysyłało dane z czujników, żebym miał podgląd gdy jestem poza domem. Gdy otwieram link w przeglądarce wszystko działa. Z ESP niestety dostaję badrequest, lub send ok, ale wpisu w bazie nie ma.

AT+CIPSTART=0,"TCP","http://www.test.pl",80

AT+CIPSEND=0,95

GET /base/temperatura.php?value=54 HTTP/1.1\r\n Host: www.test.pl\r\n Connection: close\r\n\r\n

AT+CIPCLOSE=0

Spróbowałem też tej opcji i tutaj dostaję zwrotkę ok, ale na stronie nic się nie dzieje

AT+CIPSTART=0,"TCP","http://www.test.pl",80

AT+CIPSEND=0,72

GET http://www.test.pl/base/temperatura.php?value=54 HTTP/1.1

AT+CIPCLOSE=0

 

 

Niestety z dodaniem agenta również nie działa 

AT+CIPSTART=0,"TCP","http://www.test.pl",80

AT+CIPSEND=0,115

GET /base/temperatura.php?value=54 HTTP/1.1\r\nHost: http://www.test.pl\r\nUser-Agent: ESP\r\nConnection: close\r\n

AT+CIPSTATUS

AT+CIPCLOSE=0
14:50:44.637 -> 0,CONNECT
14:50:44.637 -> 
14:50:44.637 -> OK
14:50:46.947 -> AT+CIPSEND=0,124

14:50:46.947 -> 
14:50:46.947 -> OK
14:50:46.947 -> > +CIPCLOSE=0

14:51:00.174 -> busy s...
14:51:00.174 -> 
14:51:00.174 -> Recv 124 bytes
14:51:00.214 -> 
14:51:00.214 -> SEND OK
14:51:00.214 -> 
14:51:00.214 -> +IPD,0,295:HTTP/1.1 400 Bad Request
14:51:00.214 -> Server: nginx
14:51:00.214 -> Date: Fri, 10 Feb 2023 13:50:59 GMT
14:51:00.254 -> Content-Type: text/html
14:51:00.254 -> Content-Length: 150
14:51:00.254 -> Connection: close
14:51:00.254 -> 
14:51:00.254 -> <html>
14:51:00.254 -> <head><title>400 Bad Request</title></head>
14:51:00.254 -> <body>
14:51:00.254 -> <center><h1>400 Bad Request</h1></center>
14:51:00.254 -> <hr><center>nginx</center>
14:51:00.254 -> </body>
14:51:00.254 -> </html>
14:51:00.254 -> 0,CLOSED

 

 

Edytowano przez eunectees
Link do komentarza
Share on other sites

To co robisz było używane w Arduino z 8 lat temu, potem został stworzony core do ESP i całość programu można realizować wewnątrz ESP, jeśli z jakiegoś powodu potrzebujesz pinów Arduino to jemu wysyłasz polecenia przez UART z ESP, ESP jest mózgiem całego układu. Ma to tę zaletę, że przykładów jak wykorzystać ESP do zrobienia czegoś online znajdziesz na pęczki, a istniejące tutoriale jak wykorzystywać ESP jako modem AT mogą być już przestarzałe i odwoływać się do stron z przykładowymi rozwiązaniami, które przestały już istnieć, biblioteka do AT nie była aktualizowana już od lat.

Instalujesz core ESP8266, wybierasz z przykładów klienta, oprogramowujesz w ESP co chcesz, a Arduino Ci podsyła przez UART pomiary, odbiera ewentualnie już obrobione dane do pokazania na ekranie, czy polecenia wysterowania jakiś elementów. ESP-01 w zupełności do tego wystarcza, a taki model jak WEMOS mini ma wyprowadzone dodatkowe piny, jak nie potrzebujesz pomiarów ADC czy kilkunastu pinów IO to UNO w ogóle wylatuje z zestawu. Ostatecznie można użyć ESP32, który ma więcej pinów IO i ADC 12bit. Obie płytki Esp są obecnie tańsze niż klony UNO  prosto z Chin. 

Po wgraniu kodu z ESP core Arduino tracisz firmware AT, ale można wgrać go z powrotem używając odpowiednich narzędzi. ESP-WEMOS ma możliwość updatu oprogramowania również przez WIFI, nie trzeba go mieć podłaczonego kablem pod PC, ESP-01 też to może zadziałać jeśli ma co najmniej 1MB flash, były niestety też wersje 0.5MB i czasami się takie ciągle trafiają w sprzedaży.

Link do komentarza
Share on other sites

AT i esp ma uzasadnienie kiedy chce się ograniczyć pobór prądu. Nawet z deep sleep nie da się zejść poniżej 14µA podczas gdy w trybie shut down jest to 0.5µA 

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.