Sisukord:
- Samm: AP paigaldamine Wroveriga
- 2. samm: jaama kokkupanek TTGO -ga
- 3. samm: TULEMUS
- Samm 4: arhiivige LOG.CSV
- Samm: Adafruit GFX raamatukogu
- 6. samm: Adafruit ST7735 raamatukogu
- Samm: kaartide seadistamine
- 8. samm: AP.ino
- 9. samm: Station.ino
- 10. samm: failid
Video: ESP32 välise pikamaa -antenniga: 10 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:48
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
3. samm: TULEMUS
Maksimaalne kaugus 2x välise antenniga: 315 meetrit
Maksimaalne kaugus välis- ja siseantenniga: 157 meetrit
Samm 4: arhiivige LOG. CSV
Salvestasin andmed SD -kaardile, andmed millis, dbm ja pakettring.
Samm: Adafruit GFX raamatukogu
Avage Arduino IDE-s visand-> Kaasa raamatukogu-> Halda raamatukogusid…
Installige Adafruit GFX raamatukogu
6. samm: Adafruit ST7735 raamatukogu
Avage Arduino IDE-s visand-> Kaasa raamatukogu-> Halda raamatukogusid…
Installige Adafruit ST7735
Samm: 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:
INO
Soovitan:
DIY pikamaa kaugus parima sõbra tuled: 4 sammu (piltidega)
DIY pikamaa kauguse parima sõbra tuled: tegin pikamaa sünkroniseeritud tuled, mida tuntakse kui "Parim sõber"; lambid. See tähendab lihtsalt, et neid hoitakse sünkroonis teise lambi praeguse värviga. Nii et kui te muudaksite ühe lambi roheliseks, siis varsti pärast seda süttiks teine lamp
Sõlm-punane IoT pikamaa vibratsiooni ja temperatuurianduriga: 34 sammu
Sõlm-punane koos IoT pikamaa vibratsiooni- ja temperatuurianduriga: tutvustame NCD kaugjuhtimispuldi traadita temperatuuriniiskuse andurit, mis ulatub kuni 28 miili kauguseni, kasutades traadita võrgusilma arhitektuuri. Honeywell HIH9130 temperatuuriniiskusanduri kasutamine edastab ülitäpse temperatuuri ja
Pikamaa IR -lähedusandur: 3 sammu
Pikamaa IR -lähedusandur: Infrapunaandurid on parim objektide tuvastamise moodul, kuid probleem on selles, et see töötab väga lühikese vahemaa tagant. selles artiklis jagame, kuidas saate vahemikku suurendada ja millised tegurid vahemikku mõjutavad
Pikamaa, 1,8 km, Arduino kuni Arduino traadita side HC-12-ga: 6 sammu (piltidega)
Pikamaa, 1,8 km, Arduino-Arduino traadita side HC-12-ga: Selles juhendis saate teada, kuidas suhelda Arduinode vahel pikal, kuni 1,8 km kaugusel vabas õhus. HC-12 on traadita jadaport kommunikatsioonimoodul, mis on väga kasulik, äärmiselt võimas ja hõlpsasti kasutatav. Kõigepealt leiad
Wifi signaali kurn (WokFi) pikamaa: 3 sammu (piltidega)
Wifi signaali kurn (WokFi) pikamaa: selles juhendatavas teen ma ühise WiFi -mälupulga lihakaks wifi -laiendajaks! "Paraboolne Aasia toiduvalmistamise (pelmeenide) kurn on selle projekti jaoks ideaalne kandidaat. Suutsin hankida veel 20 juurdepääsu linnas ja ühendage võrguga