Skocz do zawartości

Komendy AT z poziomu Arduino Uno R3


Pomocna odpowiedź

Napisano

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;
}

 

(edytowany)

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_

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.

A ja jak zawsze pod prąd, nie rozumiem wykorzystywania komend AT w przypadku użycia ESP.

Nie próbowałeś programować bezpośrednio ESP, często rozwiązuje to wiele problemów, czasem tworzy nowe 🙂

(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

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.

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 

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...