Sériová komunikace ESP-01 8266 a Arduino Nano

Raspberry, Arduino, Mini-PC a další

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
mjana
Příspěvky: 23
Registrován: 25 bře 2023, 01:00
Bydliště: Ostrava

Sériová komunikace ESP-01 8266 a Arduino Nano

#1 Příspěvek od mjana »

Ahoj, pokouším se předat si z ESP-01 8266 do Arduina za pomoci SoftwareSerialu string, ale nějak se mi to nedaří. Mohl by se mi někdo podívat na kód a říct mi, kde dělám chybu, prosím?

RX, TX zapojeno do kříže.

ESP-01 8266:

Kód: Vybrat vše

#include "ESP8266WiFi.h"

const char* ssid = "";       //Enter SSID
const char* password = "";  //Enter Password

void setup(void) {
  Serial.begin(9600);
}

void loop() {
  Serial.print("esp1");
  delay(5000);
}
Arduino Nano:

Kód: Vybrat vše

void setup() {
  // Serial
  Serial.begin(9600);
}

void loop() {
   if (Serial.available() > 0) {
   Serial.println(Serial.read());
  }
  delay(1000);
}
Na výstupu mi Arduino píše:

Kód: Vybrat vše

0
0
0
atd...
Naposledy upravil(a) mjana dne 31 kvě 2023, 17:02, celkem upraveno 2 x.

Uživatelský avatar
Celeron
Příspěvky: 16140
Registrován: 02 dub 2011, 02:00
Bydliště: Nový Bydžov

#2 Příspěvek od Celeron »

Nevím, co to máš za knihovnu SoftwareSerial.h.
Ta moje pro 328P se inicializuje:
SoftwareSerial mySerial(9, 10);
mySerial.begin(9600);


něco k přečtení na lince:
while (mySerial.available())

a vlastní čtení:

d = mySerial.read();

Je to kuchnutý z funkčního příjmu dat z GPS modulu. Myslím, že máš 2 problémy, na 0 a 1 je vstup a výstup HW UARTu 328P, musíš dát jiný, třeba 9 a 10 jako mám já.
A za druhák, SoftwareSerial neumí tak velkou přenosovou rychlost jako HW UART. Já mám odzkoušíno mezi dvěma 328P jde spolehlivě pouze 19200Bd. 57600 už švejkuje.
Jirka

Proč mi nemůže všechno chodit hned ?!!

Uživatelský avatar
Cowley
Příspěvky: 3087
Registrován: 04 úno 2005, 01:00

#3 Příspěvek od Cowley »

Něco z YouTube

Na začátku propojuje komunikaci na vnitřní UART 0/1, na konci pak ještě na Software Serial 2/3

Každopádně SoftwareSerial 0/1 je blbost.

Uživatelský avatar
mjana
Příspěvky: 23
Registrován: 25 bře 2023, 01:00
Bydliště: Ostrava

#4 Příspěvek od mjana »

Vyzkoušel jsem připojit ESP-01 k arduinu na piny 2, 3 namísto na RX,TX. Vytvořil SoftwareSerial a nastavil na 9600. Viz aktualizovaný kód. Ale dostávám pořád stejný výstup.

Díval jsem se i na to video, ale v komentářích se zmiňují o tom, že to má špatně.

Uživatelský avatar
Mahoney
Příspěvky: 347
Registrován: 26 říj 2019, 02:00

#5 Příspěvek od Mahoney »

Ale jestli dobře vidím, tak máš v tom kódu pro ESP-01 software serial zakomentovaný a používáš hardwarový (na kterém máš ale ten USB převodník "z GM", nebo ne?)… Jinými slovy, ono to Arduino možná nekecá, první musíš ověřit, jestli ti znak z ESP-01 skutečně odchází. Připoj to ESP přes TTL převodník přímo na RS232 a použij nějaký terminálový program, aby ses podíval… Výborný je třeba Terminal 1.9 by Br@y, mimochodem běhá i pod Wine - nebo jestli jsi na Linuxu, můžeš použít i příkaz screen, samozřejmě upravený dle svých požadavků - např.

Kód: Vybrat vše

screen /dev/ttyS0 9600
Na konzoli v Arduino IDE při programování ESP ten znak z ESP vidíš? Máš tam totiž ardSerial.write…

Uživatelský avatar
Celeron
Příspěvky: 16140
Registrován: 02 dub 2011, 02:00
Bydliště: Nový Bydžov

#6 Příspěvek od Celeron »

Mahoney píše: Na konzoli v Arduino IDE při programování ESP ten znak z ESP vidíš? Máš tam totiž ardSerial.write…
No tak to je třetí chyba, tý jsem si ani nevšiml. Pokud chceš po sériovce přenášet text, tak musíš dát Serial.print("cosi");
Serial.Write ti přenese jen jeden byte. Pokud budeš chtít přenýst třeba unsigned long do druhýho Arduina abys měl i v tom druhým unsigned long tak musíš přenýst 4 byte třeba takhle:

Kód: Vybrat vše

unsigned long frequency = 20000000;
Serial.write((byte*)&frequency, sizeof(frequency));

A příjem na druhým bude:

Kód: Vybrat vše

unsigned long receivedFrequency;
if (Serial.available() >= sizeof(receivedFrequency)) {
  Serial.readBytes((byte*)&receivedFrequency, sizeof(receivedFrequency));
}
Jirka

Proč mi nemůže všechno chodit hned ?!!

Uživatelský avatar
Mahoney
Příspěvky: 347
Registrován: 26 říj 2019, 02:00

#7 Příspěvek od Mahoney »

JJ, to taky, i tohle by mohl použít (pokud by si hodnoty upravil), dobrej tip. Mě šlo ale o to, že v Setupu pro to ESP má použitý HW sériák a softwarový zakomentovaný, ale v Loopu zapisuje na ten softwarový (který si nenastavil), takže se logicky prostě nic neposílá. Proto jsem mu psal, ať se na to podívá pořádně (a taky se ty příspěvky snažím psát pro všechny, tzn. až se na to podívá za půl roku nějakej úplně jinej začátečník, tak aby mu to taky něco dalo, není to že bych chtěl např. z někoho dělat 🤐, nebo tak něco… )

Uživatelský avatar
mjana
Příspěvky: 23
Registrován: 25 bře 2023, 01:00
Bydliště: Ostrava

#8 Příspěvek od mjana »

Už z toho začínám být zoufalý :D

Znovu jsem upravil kód v prvním příspěvku. Zrušil jsem software serial a mám zapojeno přímo do RX, TX v Arduinu do kříže. Ale stejně mi to pořád píše 0. Když zapojím ESP do převodníku a spustím si ho samostatně, tak do serial monitoru ten string vypisuje.

Uživatelský avatar
Celeron
Příspěvky: 16140
Registrován: 02 dub 2011, 02:00
Bydliště: Nový Bydžov

#9 Příspěvek od Celeron »

No a není tohle náhodou ten Tvůj problém? ESP jsem neštudoval ale trápil jsem se s Every. To má první USART pro USB štekr a na něj se píše přímo Serial.printem. Proto máš správnej výpis v PC. Jenže pokud chceš TTL sériový data poslat mimo USB na nějaký piny, tak na to jsou v Every další tři USARTy. IDE prostředí má povolenej jen jeden ale ty další dva se dají aktivivat dodatečně v definici desky. Takže pokud chceš posílat data mimo USB, používáš Serial1.print, Serial2.print a Serial3.print.
ESP to může mít podobně. Chci tím říct, že z toho ESP nemusí nic korektního lýzt. Osciloskopem se můžeš na linku podívat, pokud nemáš, tak dej 300Bd a mělo by to být vidět na připojený LEDce.
Přečti si, jak je u ESP ta sériová komunikace dělaná a nebo se zkus zeptat OpenAI. Mě u toho Every poradil, co mám na netu hledat. Ale přímej odkaz na net ti nedá, prý autorský práva.
Jirka

Proč mi nemůže všechno chodit hned ?!!

Uživatelský avatar
Mahoney
Příspěvky: 347
Registrován: 26 říj 2019, 02:00

#10 Příspěvek od Mahoney »

Ok, když ESP vypisuje, tak ho tak už nech, zatím. Co máš přesně za Arduino desku?

Edit - 2Celeron: Koukám, že zase ve stejnej čas :D Může mít problém s napěťovými úrovněmi, proto se ho ptám na desku.

Uživatelský avatar
Celeron
Příspěvky: 16140
Registrován: 02 dub 2011, 02:00
Bydliště: Nový Bydžov

#11 Příspěvek od Celeron »

Tak tady máš vyjádření Open AI:

Kód: Vybrat vše

Ahoj! Máš správné úvahy ohledně problémů s komunikací mezi ESP D1 a ProMini. Zde je odpověď na tvé dotazy:

    Desky ESP, včetně ESP D1, jsou skutečně navrženy pro provoz na 3,3V. To znamená, že signály RX a TX na ESP D1 budou pracovat na úrovních 0-3,3V. ProMini na druhou stranu pracuje na 5V úrovních. To může způsobit problémy s kompatibilitou úrovní signálů mezi oběma deskami. Pro správnou komunikaci by měly být úrovně signálů přizpůsobeny, například pomocí úrovněrů signálu (level shifter) mezi oběma deskami.

    ESP D1 (a další desky ESP) má většinou více USART (Universal Asynchronous Receiver/Transmitter) rozhraní. Standardně je používán USART0 pro komunikaci přes USB (tzv. "Serial"), ale existuje také možnost použití dalších USART rozhraní (např. USART1) pro komunikaci přes TTL linku na jiných pinech. Pokud ESP D1 disponuje více USART rozhraními, může být nutné specifikovat, které rozhraní se má použít pro komunikaci přes TTL linku (Serial1.print atd.). Je důležité si ověřit dokumentaci desky ESP D1, abys zjistil, jaké USART rozhraní je k dispozici a jak je správně použít pro komunikaci s ProMini.

V obou případech je důležité provést správné přizpůsobení úrovní signálů a správně specifikovat USART rozhraní pro komunikaci mezi ESP D1 a ProMini. 
Jirka

Proč mi nemůže všechno chodit hned ?!!

Uživatelský avatar
pocitujlasku
Příspěvky: 1757
Registrován: 12 pro 2005, 01:00

#12 Příspěvek od pocitujlasku »

AI keca, a nie je to esp D1, ale 01.
Bezne pouzivam 01 a jej seriovy port a chodi to v pohode.
Pro mini existuje v 2 verziach. 5V 16MHz a 3.3V 8MHz

Len taka poznamocka: bacha na 01, su dost nachylne na odpalenie. nahodne po zapnuti zacnu sialene hriat a uz nejdu. Zapojenim to ale nie je, lebo ked ich nahradim 12, tak ta mi neodisla ani jedna. (Aj na internete sa casto stazuju na vysoku kazivost 01).

Kód: Vybrat vše

void setup() {
  Serial.begin(9600);
  while (!Serial) {
    ;
  }
}

void loop() {
  if (Serial.available() > 0) {
    Serial.write(Serial.read());
  }
  yield(); //toto neviem ci potrebuje aj pro mini, alebo iba esp
}
skus to spustit na pro mini a mal by to byt obycajny loopback - na overenie, ze seriova komunikacia funguje ako ma.
No vidis, a tak si sa bal

Uživatelský avatar
Mahoney
Příspěvky: 347
Registrován: 26 říj 2019, 02:00

#13 Příspěvek od Mahoney »

Jenže tady nikde ve vláknu nebylo uvedeno, co má za desku, nevím kde se vzalo Pro mini (že je AI blbost obecně, o tom už bylo vlákno sólo).

ESP-01 je na 3V3, ale myslím si, že má nějakou Arduino desku na 5V a ta s tím má v jednom směru možná problém (záleží, jak to napájí, a navíc bych si nevsadil ani na to, že v tom druhém má ESP-01 5V tolerantní vstup):

https://learn.sparkfun.com/tutorials/logic-levels/all

(Arduino logic levels)

Uživatelský avatar
pocitujlasku
Příspěvky: 1757
Registrován: 12 pro 2005, 01:00

#14 Příspěvek od pocitujlasku »

aha, v prvom prispevku pise, ze kod je na arduino nano, a to je 5V.
ESP nie je 5V tolerant, to je spomenute hadam v kazdom clanku o tomto module.
Cisto teoreticky to nano by malo ako tak fungovat aj na 3.3V - ja som si bezne palil arduino bootloader do atmegy328 so 16MHz krystalom cez esp-12 a cele to bolo napajane 3.3V
No vidis, a tak si sa bal

Uživatelský avatar
Celeron
Příspěvky: 16140
Registrován: 02 dub 2011, 02:00
Bydliště: Nový Bydžov

#15 Příspěvek od Celeron »

Mahoney píše:Jenže tady nikde ve vláknu nebylo uvedeno, co má za desku, nevím kde se vzalo Pro mini (že je AI blbost obecně, o tom už bylo vlákno sólo).
Co je blbost? Hned v prvním příspěvku je napsáno, že to posílá do ProMini. A že neexistuje Wemos D1 ESP8266 je taky blbost? Když už teda ESP 01, tak jakej je rozdíl proti Wemos D1? Žádnej.
No a to s Serial, Serial1 až Serial4 mám odzkoušeno osobně. Nebylo specifikováno o jakou ESP desku jde třeba ESP 32 maj USARty tři.
Jirka

Proč mi nemůže všechno chodit hned ?!!

Odpovědět

Zpět na „Miniaturní počítače (Arduino, Raspberry a další)“