Sisukord:

ESP32 välise pikamaa -antenniga: 10 sammu
ESP32 välise pikamaa -antenniga: 10 sammu

Video: ESP32 välise pikamaa -antenniga: 10 sammu

Video: ESP32 välise pikamaa -antenniga: 10 sammu
Video: Как запрограммировать модуль реле Wi-Fi ESP8266 ESP-01 2024, November
Anonim
Image
Image
AP paigaldamine Wroveriga
AP paigaldamine Wroveriga

Tänane teema puudutab kaugtesti välise antenniga ESP32 -ga. Kasutame täna kahte moodulit: Espressifist ja TTGOst. Kontrollime siis nende kahe ESP32 antenni vahelist RSSI -d, genereerime ajaloost graafiku ja kirjutame väärtuste logi.csv -faili.

Seejärel on meil ESP32 Wrover AP -na ja TTGO ESP32 jaamana. Kasutasin antenni, mille võtsin pisut suuremast TP-Linkist ja teisest 9dbm antennina tuntud ruuterist. Ma ei märganud nende kahe vahel mingit erinevust.

Lõpuks ühendatakse kaks mikrokontrollerit pistikupesa kaudu ja iga andmepakettide saatmisega trükime ekraanile graafiku, millel on ribad, mis näitavad dbm -i suhet.

Samm: AP paigaldamine Wroveriga

2. samm: jaama kokkupanek TTGO -ga

Jaama kokkupanek TTGO -ga
Jaama kokkupanek TTGO -ga

3. samm: TULEMUS

TULEMUS
TULEMUS
TULEMUS
TULEMUS
TULEMUS
TULEMUS

Maksimaalne kaugus 2x välise antenniga: 315 meetrit

Maksimaalne kaugus välis- ja siseantenniga: 157 meetrit

Samm 4: arhiivige LOG. CSV

Arhiiv LOG. CSV
Arhiiv LOG. CSV
Arhiiv LOG. CSV
Arhiiv LOG. CSV

Salvestasin andmed SD -kaardile, andmed millis, dbm ja pakettring.

Samm: Adafruit GFX raamatukogu

Adafruit GFX raamatukogu
Adafruit GFX raamatukogu

Avage Arduino IDE-s visand-> Kaasa raamatukogu-> Halda raamatukogusid…

Installige Adafruit GFX raamatukogu

6. samm: Adafruit ST7735 raamatukogu

Adafruit ST7735 raamatukogu
Adafruit ST7735 raamatukogu

Avage Arduino IDE-s visand-> Kaasa raamatukogu-> Halda raamatukogusid…

Installige Adafruit ST7735

Samm: kaartide seadistamine

Kaartide seadistamine
Kaartide seadistamine
Kaartide seadistamine
Kaartide seadistamine

Olge erinevustega kursis:

8. samm: AP.ino

Oleme lisanud vajalikud teegid ja määratlenud mõned parameetrid.

#include #include #include #include #include #include // Rede que o ESP criará. No Station deve ser igual #define SSID "RSSI_Test" #define PASSWORD "87654321" // Tempo de time of para conrarar a conexão pedida #define TIMEOUT 2000 // Largura e altura do display #define DISPLAY_WIDTH 160 #define DISPLAY_HEURIS 128 cor, margem e tamanho do gráfico #define PLOT_COLOR ST77XX_GREEN #define PLOT_MARGIN 20 #define PLOT_SIZE (DISPLAY_HEIGHT - 2*PLOT_MARGIN) // Arquivo de log no SD #define FILE_PATH "/log.cs

Teiste muutujate hulgas määratleme tihvtid

// Pinos do display #define DISPLAY_DC 12 // A0 #define DISPLAY_CS 13 // CS #define DISPLAY_MOSI 14 // SDA #define DISPLAY_CLK 27 // SCK #define DISPLAY_RST 0 // Pino do SDCard. Os pinos mosi, miso e sck são os nativos (23., 19. ja 18. austus) #define SDCARD_CS 15 // Pixel onde or gráfico começa horisontaalne menüü int currentX = PLOT_MARGIN; // Objekti vastus tasapinnalisele ekraanile Adafruit_ST7735 kuva = Adafruit_ST7735 (DISPLAY_CS, DISPLAY_DC, DISPLAY_MOSI, DISPLAY_CLK, DISPLAY_RST); // Criamos um server (qualquer porta válida serve contanto que o cliente utilize a mesma porta) WiFiServer server (80); // Variável para armazenar o cliente (no caso o ESP32 em modo station) koos WiFiClient kliendiga; // String que recebemos do cliente String sai; // RSSI enviado pelo cliente para este ESP32 long rssi = 0; // Faz o controle do temporizador (interruptção porpor tempo) hw_timer_t *timer = NULL; // Utilizado para guardar os ultimos std:: vector rssiHistory;

Seadistamine

void setup () {Serial.begin (115200); setupDisplay (); // Inicializa või SD if (! SD.begin (SDCARD_CS)) {display.println ("Erro ao inicializar lib SD!"); } // Cria a wide WiFi, inialialize or server e espera or cliente conectar setupWiFi (); server.begin (); waitForClient (); // Espera 3 segundos, limpa a tela e inicializa o Watchdog delay (3000); display.fillScreen (ST77XX_BLACK); display.setCursor (0, 0); setupWatchdog (); }

WiFi seadistamine

// Cria um Access Point ja konfiguratsioon või IPvoid setupWiFi () {display.println ("SoftAP loomine" + string (SSID)); WiFi.disconnect (); WiFi -režiim (WIFI_AP); WiFi.softAPConfig (IPAddress (192, 168, 0, 1), IPAddress (192, 168, 0, 1), IPAddress (255, 255, 255, 0)); WiFi.softAP (SSID, PASSWORD); display.println ("softAP" + string (SSID) + "loodud!"); }

Seadistuskuva

// Incializa o display, muda a orientation and limpa a telavoid setupDisplay () {// Inicializa o display display.initR (INITR_BLACKTAB); // Rotaciona o conteúdo mostrado display.setRotation (3); // Ekraanile eelnev kuvamine.fillScreen (ST77XX_BLACK); }

waitForClient

void waitForClient () {display.println ("Ootab klienti"); // Aguarda o cliente conectar while (! (Klient = server.available ())) {display.print ("."); viivitus (500); } display.println ("Klient ühendatud"); // Tempo máximo que o cliente deve demorar para responder // antes de dizermos que a conexão foi perdida client.setTimeout (TIMEOUT); }

IRAM_ATTR resetModule and setupWatchdog

// função que o temporizador irá chamar, para reiniciar o ESP32void IRAM_ATTR resetModule () {ets_printf ("(valvekoer) reiniciar / n"); esp_restart_noos (); // reinicia o chip} void setupWatchdog () {timer = timerBegin (0, 80, true); // timerID 0, div 80 // timer, callback, interrupção de borda timerAttachInterrupt (taimer, & resetModule, true); // taimer, tempo (meie), repetição timerAlarmWrite (taimer, 10000000, tõene); timerAlarmEnable (taimer); // habilita a interrupção}

Loop

void loop () {timerWrite (taimer, 0); // reseta o temporizador (alimenta või valvekoer) checkConnection (); // checa se possui conexão com või klient readFromClient (); // lê os dados do cliente sendToClient (); // envia confirmação para o cliente plot (); // mostra o gráfico de histórico de rssi log (); // salva um log no cartão SD}

checkConnection

void checkConnection () {// Vaadake klienti não estiver conectado if (! client.connected ()) {// Limpa a tela e espera pelo cliente display.fillScreen (ST77XX_BLACK); display.println ("Klient on lahti ühendatud"); waitForClient (); }}

readFromClient

void readFromClient () {// Espera até või klient enviar algo ou desconectar while (client.connected () &&! client.available ()) {delay (100); } // Se chegou aqui e ainda estiver conectado é porque possui algo para receber do cliente if (client.connected ()) {said = client.readStringUntil ('\ n'); // Lê o texto que o cliente enviou said.remove (said.length ()-1); // Eemalda o / n do the final rssi = client.parseInt (); // Lê o rssi que o cliente enviou clearText (); // Limpa või texto display.setCursor (0, 0); // Liiguta või liiguta kursorit ekraani kuvamiseks.println ("RSSI:" + String (rssi)); // Mostra või RSSI puudub kuvari kuvamine.println ("Vastuvõetud:" + vastu võetud); // Mostra a mensagem recebida do klient. algus ()); } // Märkus no final do histórico (mais recente) rssiHistory.push_back (rssi); }}

sendToClient

void sendToClient () {// Vaadake kliente, kes soovivad, et nad saaksid seda teha ja menüükäsk com um OK, kui (client.connected ()) {String Send = saanud + "OK"; klient.println (saatmine); }}

süžee

void plot () {// Coloca no ponto inicial e limpamos o gráfico currentX = PLOT_MARGIN; display.fillRect (PLOT_MARGIN, 2*PLOT_MARGIN, DISPLAY_WIDTH - 2*PLOT_MARGIN, DISPLAY_HEIGHT - 2*PLOT_MARGIN, ST77XX_BLACK); // Para cada valor do histórico fazemos o cálculo do tamanho da barra do gráfico, desenhamos e avançamos para o próximo for (int i = 0; i -120? Map (rssiHistory , -120, 0, 0, PLOT_SIZE): 0; display.drawFastVLine (currentX, DISPLAY_HEIGHT - väärtus, väärtus, PLOT_COLOR); currentX += 2;}}

clearText ja log

void clearText () {// Limpa ja piirkonna tekst või tekst menüüst kliendi kuva.fillRect (0, 0, DISPLAY_WIDTH, 2*PLOT_MARGIN, ST77XX_BLACK); } void log () {// Abrimos o arquivo para escrevermos no final dele Failifail = SD.open (FILE_PATH, FILE_APPEND); // Se não conseguimos abrir o arquivo mostramos uma mensagem de erro if (! File) {Serial.println ("Faili avamine ebaõnnestus"); tagasipöördumine; } // Gravamos uma linha com o tempo desde o boot, o rssi atual e a mensagem recebida String data = String (millis ()) + ";" + String (rssi) + ";" + sai; fail.println (andmed); file.close (); }

9. samm: Station.ino

Oleme lisanud vajalikud teegid ja määratlenud mõned parameetrid.

#include #include #include #include #include #include // Nome da rede que nos conectaremos. Criado pelo AP #define SSID "RSSI_Test" #define PASSWORD "87654321" #define HOST "192.168.0.1" // IP que foi configure no setup do AP #define PORT 80 // Porta do sever. Qualquer porta válida contanto que seja igual nos dois arquivos // Tempo de timeout para kaaluti a conexão pedida #define TIMEOUT 2000 // Largura e altura do display #define DISPLAY_WIDTH 160 #define DISPLAY_HEIGHT 128 // Configurações de de cor do mar, e #define PLOT_COLOR ST77XX_GREEN #define PLOT_MARGIN 20 #define PLOT_SIZE (DISPLAY_HEIGHT - 2*PLOT_MARGIN) // Arquivo de log no SD #define FILE_PATH "/log.csv"

Määratleme kuvari ja SD -kaardi seaded.

pikk loendus = 0; // Contador de mensagens enviadaslong rssi = 0; // RSSI calculado String on saadud; // Mensagem de confirmação que o AP nos envia // Pixel onde või gráfico começa horizontmente int currentX = PLOT_MARGIN; // Utilizado para conexão com või server WiFiClient socket; #defineeri DISPLAY_DC 12 // A0 #define DISPLAY_CS 13 // CS #define DISPLAY_MOSI 14 // SDA #define DISPLAY_CLK 27 // SCK #define DISPLAY_RST 0 // Pino do SDCard. Os pinos mosi, miso e sck são os nativos (23., 19. ja 18. austusväärtus) #define SDCARD_CS 15 // Vastuse pakkumine pelonäidikule Adafruit_ST7735 kuva = Adafruit_ST7735 (DISPLAY_CS, DISPLAY_DC, DISPLAY_MOSI, DISPLAY_CL) hw_timer_t *taimer = NULL; // faz o controle do temporizador (interruptção por tempo) // Utilizado para guardar os ultimos std:: vector rssiHistory;

Seadistamine

void setup () {setupDisplay (); // Inicializa või SD if (! SD.begin (SDCARD_CS)) {display.println ("Erro ao inicializar lib SD!"); } // Conecta puudub pääsupunkt criado pelo outro ESP32 ja ühendab serveri seadistuseWiFi (); connectToServer (); // Espera 3 segundos, limpa a tela e inicializa o Watchdog delay (3000); display.fillScreen (ST77XX_BLACK); display.setCursor (0, 0); setupWatchdog (); }

setupDisplay

// Incializa o display, muda a orientation and limpa a telavoid setupDisplay () {// Inicializa o display display.initR (INITR_BLACKTAB); // Rotaciona o conteúdo mostrado display.setRotation (1); // Pildi tela de branco display.fillScreen (ST77XX_BLACK); display.setTextColor (ST77XX_WHITE); }

seadistamineWiFi

// Conecta ao AP void setupWiFi () {WiFi.disconnect (); WiFi -režiim (WIFI_STA); WiFi.binin (SSID, PASSWORD); display.println ("Ühendamine" + string (SSID)); // Enquanto não estiver conectado à rede WiFi while (WiFi.status ()! = WL_CONNECTED) {delay (500); display.print ("."); } display.println (""); display.print ("Ühendatud"); display.println (SSID); }

connectToServer

void connectToServer () {display.println ("Proovin sokliühendust"); // Espera a conexão com o server while (! Socket.connect (HOST, PORT)) {display.print ("."); viivitus (500); } display.println (); display.println ("Ühendatud!"); // Tempo máximo que o cliente deve demorar para responder // antes de dizermos que a conexão foi perdida socket.setTimeout (TIMEOUT); }

IRAM_ATTR resetModule and setupWatchdog

// função que o temporizador irá chamar, para reiniciar o ESP32void IRAM_ATTR resetModule () {ets_printf ("(valvekoer) reiniciar / n"); esp_restart_noos (); // reinicia o chip} void setupWatchdog () {timer = timerBegin (0, 80, true); // timerID 0, div 80 // timer, callback, interrupção de borda timerAttachInterrupt (taimer, & resetModule, true); // taimer, tempo (meie), repetição timerAlarmWrite (taimer, 10000000, tõene); timerAlarmEnable (taimer); // habilita a interrupção}

silmus

void loop () {timerWrite (taimer, 0); // reseta o temporizador (alimenta või valvekoer) checkConnection (); // checa se possui conexão com o server checkRSSI (); // verifica o rssi plot (); // mostra o gráfico de histórico de rssi sendToServer (); // envia uma mensagem com um contador para server server readFromServer (); // espera a confirmação do server log (); // salva um log no cartão SD delay (1000); // espera um segundo}

checkConnection

void checkConnection () {// Verifica a conexão com o AP if (WiFi.status ()! = WL_CONNECTED) {display.fillScreen (ST77XX_BLACK); display.setCursor (0, 0); display.println ("WiFi ühendus katkestatud"); setupWiFi (); viivitus (1000); } // verifica a conexão do socket if (! socket.connected ()) {display.fillScreen (ST77XX_BLACK); display.setCursor (0, 0); display.println ("Pesa lahti ühendatud"); connectToServer (); viivitus (3000); display.fillScreen (ST77XX_BLACK); }}

checkRSSI

void checkRSSI () {// Verifica või RSSI rssi = WiFi. RSSI (); // Limpa o texto e mostra o RSSI no display clearText (); display.setCursor (0, 0); display.print ("RSSI:" + string (rssi)); // Se a quantidade de barras do gráfico passou do limite apagamos o registro mais antigo if (rssiHistory.size () == (DISPLAY_WIDTH - 2*PLOT_MARGIN)/2) {rssiHistory.erase (rssiHistory.begin ()); } // Märkus no final do histórico (mais recente) rssiHistory.push_back (rssi); }

süžee

void plot () {// Coloca no ponto inicial e limpamos o gráfico currentX = PLOT_MARGIN; display.fillRect (PLOT_MARGIN, 2*PLOT_MARGIN, DISPLAY_WIDTH - 2*PLOT_MARGIN, DISPLAY_HEIGHT - 2*PLOT_MARGIN, ST77XX_BLACK); // Para cada valor do histórico fazemos o cálculo do tamanho da barra do gráfico, desenhamos e avançamos para o próximo for (int i = 0; i -120? Map (rssiHistory , -120, 0, 0, PLOT_SIZE): 0; display.drawFastVLine (currentX, DISPLAY_HEIGHT - väärtus, väärtus, PLOT_COLOR); currentX += 2;}}

sendToServer

void sendToServer () {// Näete serveri ühendust serveriga if (socket.connected ()) {// Envia um hello com um contador, mostra no display e inkmenta o contador String send = "Tere" + String (loend); display.setCursor (0, 10); display.println ("Saadan:" + saatmine); socket.println (saatmine); socket.print (String (rssi)); loe ++; }}

readFromServer

void readFromServer () {// Espera até või server enviar algo ou desconectar while (socket.connected () &&! socket.available ()) {delay (100); } // Se tem algo para receber if (socket.available ()) {// Faz a leitura, remove o / n do final e mostra no display gavo = socket.readStringUntil ('\ n'); saanud.eemalda (saanud.pikkus ()-1); display.println ("Vastu võetud:" + saadud); }}

clearText ja log

void clearText () {// Limpa ja piirkonna tekst või tekst menüüst kliendi kuva.fillRect (0, 0, DISPLAY_WIDTH, 2*PLOT_MARGIN, ST77XX_BLACK); } void log () {// Abrimos o arquivo para escrevermos no final dele Failifail = SD.open (FILE_PATH, FILE_APPEND); // Se não conseguimos abrir o arquivo mostramos uma mensagem de erro if (! File) {Serial.println ("Faili avamine ebaõnnestus"); tagasipöördumine; } // Gravamos uma linha com o tempo desde o boot, o rssi atual e a mensagem recebida String data = String (millis ()) + ";" + String (rssi) + ";" + sai; fail.println (andmed); file.close (); }

10. samm: failid

Laadige failid alla:

PDF

INO

Soovitan: