ESP-01 - Komunikace mezi dvěma zařízeními (bez routeru)
ESP-01 - Komunikace mezi dvěma zařízeními (bez routeru)
Zdravím,
potřeboval bych zařídit komunikaci mezi dvěma zařízeními ESP-01 (žádné NodeMCU, pouze ESP-01). K dispozici mám Arduina Nano. Představuji si to tak, že jedno ESP bude spojené s Arduinem a např. na displeji se bude zobrazovat teplota získaná z teplotního čidla, které bude připojené na druhé ESP-01.
Vzhledem k tomu, že zařízení budou umístěna v místě, kde není Wi-Fi, potřebuji zařídit komunikaci bez jakýchkoli dalších síťových prvků.
Prosím o rady, zda je to možné a co k tomu potřebuji.
Děkuji
potřeboval bych zařídit komunikaci mezi dvěma zařízeními ESP-01 (žádné NodeMCU, pouze ESP-01). K dispozici mám Arduina Nano. Představuji si to tak, že jedno ESP bude spojené s Arduinem a např. na displeji se bude zobrazovat teplota získaná z teplotního čidla, které bude připojené na druhé ESP-01.
Vzhledem k tomu, že zařízení budou umístěna v místě, kde není Wi-Fi, potřebuji zařídit komunikaci bez jakýchkoli dalších síťových prvků.
Prosím o rady, zda je to možné a co k tomu potřebuji.
Děkuji
-
- Příspěvky: 1030
- Registrován: 06 zář 2017, 20:04
- Reputation: 0
- Bydliště: Brno
- Kontaktovat uživatele:
Re: ESP-01 - Komunikace mezi dvěma zařízeními (bez routeru)
Na co tam bude to Arduino? Na ten displej bude někdo často koukat? Nemohlo by to být jen přes Android mobil?
Re: ESP-01 - Komunikace mezi dvěma zařízeními (bez routeru)
Ten esp8266 se musí přepnout do AP nebo Both. Příkaz :
STA = 1
AP = 2
Both = 3
AT+CWMODE=2 nebo 3, dle toho, co budeš chtít využít.
Příkazem AT+CWMODE? se dozvíš v jakém režimu je.
0 – je přístupný všem, bez hesla.
2 – WPA_PSK
3 – WPA2_PSK
4 – WPA_WPA2_PSK
AT+CWSAP=”ESP”,”heslo”,1,4 jednička je kanal, a čtyřka je WPA_WPA2_PSK .
AT+CIPSERVER=1,80 jednička je pro připojení více zařízení a 80 je port.
STA = 1
AP = 2
Both = 3
AT+CWMODE=2 nebo 3, dle toho, co budeš chtít využít.
Příkazem AT+CWMODE? se dozvíš v jakém režimu je.
0 – je přístupný všem, bez hesla.
2 – WPA_PSK
3 – WPA2_PSK
4 – WPA_WPA2_PSK
AT+CWSAP=”ESP”,”heslo”,1,4 jednička je kanal, a čtyřka je WPA_WPA2_PSK .
AT+CIPSERVER=1,80 jednička je pro připojení více zařízení a 80 je port.
- pavel1tu
- Příspěvky: 2054
- Registrován: 26 říj 2017, 08:28
- Reputation: 0
- Bydliště: Trutnov
- Kontaktovat uživatele:
Re: ESP-01 - Komunikace mezi dvěma zařízeními (bez routeru)
Jaká vzdálenost ?
Zdi ?
Já v tomto případě kdy se nepřipojuji k AP jdu buď na 2,4G nRF24 (levný),
ale spíše na nižší frekvence (433MHz - lépe prolezou zdí) - na to jsou různé moduly, ale FM modulaci, ne AM - ty fungují tak na 5m ?
Zdi ?
Já v tomto případě kdy se nepřipojuji k AP jdu buď na 2,4G nRF24 (levný),
ale spíše na nižší frekvence (433MHz - lépe prolezou zdí) - na to jsou různé moduly, ale FM modulaci, ne AM - ty fungují tak na 5m ?
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Re: ESP-01 - Komunikace mezi dvěma zařízeními (bez routeru)
Displej bych tam chtěl mít - minimálně možnost dostat hodnotu z teplotního čidla do Arduina. Nevím, jestli na druhém konci, kde bude připojen teplotní senzor bude taky potřeba Arduino pro zpracování hodnoty z DHT22.
Vzdálenost bude třeba cca 100 m, jedno zařízení s displejem bude doma, druhé s teplotním čidlem venku.
Vzdálenost bude třeba cca 100 m, jedno zařízení s displejem bude doma, druhé s teplotním čidlem venku.
-
- Příspěvky: 1030
- Registrován: 06 zář 2017, 20:04
- Reputation: 0
- Bydliště: Brno
- Kontaktovat uživatele:
Re: ESP-01 - Komunikace mezi dvěma zařízeními (bez routeru)
Já jsem chtěl jen naznačit, že nechápu, proč tam dávat Arduino, když tam bude ESP8266. Ten má větší RAM, Flash, je výkonnější než Arduino. Když tam přidáš další Arduina, tak to všechno jen zkomplikuješ.
Re: ESP-01 - Komunikace mezi dvěma zařízeními (bez routeru)
Já to chápu, má verzi esp-01, ten má omezení pinu, je určen pro komunikace s MCU.
-
- Příspěvky: 1030
- Registrován: 06 zář 2017, 20:04
- Reputation: 0
- Bydliště: Brno
- Kontaktovat uživatele:
Re: ESP-01 - Komunikace mezi dvěma zařízeními (bez routeru)
ESP8266-01 má čtyři I/O piny. Na I2C displej a na pár teploměrů je to dostatek.
Re: ESP-01 - Komunikace mezi dvěma zařízeními (bez routeru)
Dobře, ale vůbec nevím, jak nastavit ty ESP tak, aby se mezi sebou spojily - nenašl jsem žádný vhodný návod pro ESP-01 spojení bez routeru. Chtěl bych dostat hodnotu např. z teplotního čidla do Arduina a moci s ní (s tím číslem) nějak pracovat.
Re: ESP-01 - Komunikace mezi dvěma zařízeními (bez routeru)
ESP8266 (používám WEMOS mini) co přijímá nastav jako AP. Zde ESP8266 reaguje na připojení od ESP8266 s čidlem nebo na dotaz z internetového prohlížeče (je nutné připojit wifi na AP ESP).
ESP obslouží max 4 klienty.
Na této ESP mám připojený NOKIA displej:
Vysílací ESP8266 je nastavená jako STA stanice. Čidlo je BME280 a posílá data co 2s:
Program mám 2 roky starý, tak to prosím ber jako návod, momentálně neodzkoušeno.
Na vysílací straně nemám zpětnou vazbu o příjmu hodnot(nebo vůbec o připojení k AP), bylo by vhodné to nějak ošetřit.
ESP obslouží max 4 klienty.
Na této ESP mám připojený NOKIA displej:
Kód: Vybrat vše
#include <U8g2lib.h>
#include <ESP8266WiFi.h> //nacteni knihovny ESP8266
WiFiServer server(80); //definice serveru na portu HTTP 80
U8G2_PCD8544_84X48_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ D5, /* data=*/ D7, /* cs=*/ D6, /* dc=*/ D8, /* reset=*/ D3);
//U8G2_PCD8544_84X48_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ D6, /* dc=*/ D8, /* reset=*/ D3); // Nokia 5110 Display
String cidlo;
void setup() {
Serial.begin(9600); //seriova komunikace na 9600
WiFi.mode(WIFI_AP); //volba modu jako prostupovy bod
WiFi.softAP("WEMOS"); //nazev naseho AP
Serial.print("AP IP addresa: ");
Serial.println(WiFi.softAPIP()); //vypis IP adresy, ktera je nastavena na
//192.168.4.1
server.begin(); //spusteni serveru
u8g2.begin();
u8g2.clearBuffer(); // clear the internal memory
u8g2.setFont(u8g2_font_8x13B_mf); // choose a suitable font
u8g2.drawStr(35,10,"IP"); // write something to the internal memory
u8g2.setFont(u8g2_font_6x12_mf);
u8g2.setCursor(0,20);
u8g2.print(WiFi.softAPIP());
u8g2.sendBuffer(); // transfer internal memory to the display
}
void loop() {
WiFiClient client = server.available(); // cekani na pripojeni klienta
if (client) { //podminka o pripojeni klienta, ESP zvlada pripojit max 4 clienty
String text = client.readString();
Serial.println(text); // vypis klientova pozadavku na seriový port
if ( text.substring(0,1) == ("W") ) { //podminka v podmince ceka na data z cidla WEMOS
cidlo = text;
String TEP = cidlo.substring(8,12);
String TLA = cidlo.substring(15,21);
String VLH = cidlo.substring(24,28);
u8g2.setFont(u8g2_font_6x12_mf);
u8g2.setCursor(0,30);
u8g2.print(TEP);
u8g2.setCursor(0,39);
u8g2.print(TLA);
u8g2.setCursor(0,48);
u8g2.print(VLH);
u8g2.sendBuffer();
client.flush();
}
else if ( text.substring(0,1) == ("G") ) { //podminka v podmince ceka na internetovy prohlizec,
//ktery vysle hned na zacatku GET ...
String TEP = cidlo.substring(8,12); Serial.print("Teplota: ");Serial.println(TEP);
String TLA = cidlo.substring(15,21); Serial.print("Tlak: "); Serial.println(TLA);
String VLH = cidlo.substring(24,28); Serial.print("Vlhkost: ");Serial.println(VLH);
client.print("Teplota: "); client.println(TEP);
client.print("Tlak: "); client.println(TLA);
client.print("Vlhkost: "); client.println(VLH);
client.flush();
}
}
}
Vysílací ESP8266 je nastavená jako STA stanice. Čidlo je BME280 a posílá data co 2s:
Kód: Vybrat vše
#include <ESP8266WiFi.h> //nacteni knihovny
#include <Adafruit_BME280.h>
byte wemosIP[] = { 192, 168, 4, 1 }; //IP adresa serveru,
//na ktery chceme posilat data
WiFiClient client; //definice nazvu klienta
Adafruit_BME280 bme280;
void setup() {
Serial.begin(9600);
if (!bme280.begin(0x76)) {
Serial.println("BME280 senzor nenalezen, zkontrolujte zapojeni!");
while (1) ;
}
WiFi.mode(WIFI_STA); //volba modu jako stanice
WiFi.begin("WEMOS"); //nazev AP stanice, ke ktere
//se chceme pripojit
while (WiFi.status() != WL_CONNECTED) {
delay(500); //dokud nedojde k pripojeni k AP
Serial.print("."); } //vypisuje same tecky
Serial.println(WiFi.localIP()); //vypise nasi úridelenou IP adresu
}
void loop() {
float tlak = ((bme280.readPressure() / 100.0F) + 30); String tl = String (tlak,1);
float teplota = bme280.readTemperature(); String te = String (teplota,1);
float vlhkost = bme280.readHumidity(); String vl = String (vlhkost,1);
client.connect( wemosIP , 80);
client.print("WEMOS");
client.print(String("TEP") + te);
client.print(String("TLA") + tl);
client.print(String("VLH") + vl);
client.stop(); //odpojime se od serveru
delay(2000); //cekani 2 sekundy
}
Na vysílací straně nemám zpětnou vazbu o příjmu hodnot(nebo vůbec o připojení k AP), bylo by vhodné to nějak ošetřit.
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 12 hostů