Stránka 1 z 3

ESP-01 - Komunikace mezi dvěma zařízeními (bez routeru)

Napsal: 11 dub 2020, 12:34
od ondyy
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

Re: ESP-01 - Komunikace mezi dvěma zařízeními (bez routeru)

Napsal: 11 dub 2020, 17:33
od jankop
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)

Napsal: 11 dub 2020, 19:17
od ArduXPP
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.

Re: ESP-01 - Komunikace mezi dvěma zařízeními (bez routeru)

Napsal: 11 dub 2020, 20:12
od pavel1tu
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 ?

Re: ESP-01 - Komunikace mezi dvěma zařízeními (bez routeru)

Napsal: 12 dub 2020, 17:45
od ondyy
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.

Re: ESP-01 - Komunikace mezi dvěma zařízeními (bez routeru)

Napsal: 12 dub 2020, 20:36
od jankop
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)

Napsal: 12 dub 2020, 21:50
od ArduXPP
Já to chápu, má verzi esp-01, ten má omezení pinu, je určen pro komunikace s MCU.

Re: ESP-01 - Komunikace mezi dvěma zařízeními (bez routeru)

Napsal: 12 dub 2020, 23:29
od jankop
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)

Napsal: 13 dub 2020, 11:17
od ondyy
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)

Napsal: 13 dub 2020, 12:29
od RomanB
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:

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

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