INHOUDSOPGAWE:
- Stap 1: Monteer die AP met Wrover
- Stap 2: Samestelling van STASIE Met TTGO
- Stap 3: RESULTAT
- Stap 4: Argiveer LOG.CSV
- Stap 5: Adafruit GFX -biblioteek
- Stap 6: Adafruit ST7735 -biblioteek
- Stap 7: Die opstel van die kaarte
- Stap 8: AP.ino
- Stap 9: Station.ino
- Stap 10: lêers
Video: ESP32 met eksterne langafstand -antenne: 10 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:26
Die onderwerp van vandag handel oor 'n afstandtoets met 'n ESP32 met eksterne antenne. Kom ons gebruik vandag twee modules: van Espressif en TTGO. Kom ons kyk dan na die RSSI tussen hierdie twee ESP32 -antennas, maak 'n grafiek uit die geskiedenis en skryf 'n logboek van die waardes in 'n CSV -lêer.
Ons het dan die ESP32 Wrover as AP, en die ESP32 van TTGO as Station. Ek gebruik 'n antenna wat ek van 'n effens groter TP-Link geneem het en 'n ander router wat bekend staan as 'n 9dbm antenna. Ek het geen verskil tussen die twee opgemerk nie.
Laastens sluit die twee mikrobeheerders via 'n sok aan, en met elke versending van datapakkies druk ons 'n grafiek op die skerm met die balke wat die verhouding van dbm aandui.
Stap 1: Monteer die AP met Wrover
Stap 2: Samestelling van STASIE Met TTGO
Stap 3: RESULTAT
Maksimum afstand met 2x eksterne antennas: 315 meter
Maksimum afstand met eksterne en interne antenne: 157 meter
Stap 4: Argiveer LOG. CSV
Ek het die data op 'n SD -kaart aangeteken, met data in millis, dbm en die pakketstring.
Stap 5: Adafruit GFX -biblioteek
Gaan in die Arduino IDE na Skets-> Sluit biblioteek in-> Beheer biblioteke …
Installeer Adafruit GFX Library
Stap 6: Adafruit ST7735 -biblioteek
Gaan in die Arduino IDE na Skets-> Sluit biblioteek in-> Beheer biblioteke …
Installeer Adafruit ST7735
Stap 7: Die opstel van die kaarte
Bly ingeskakel vir verskille:
Stap 8: AP.ino
Ons het die nodige biblioteke ingesluit en 'n paar parameters omskryf.
#include #include #include #include #include #include // Rede que of ESP criará. No Station deve ser igual #define SSID "RSSI_Test" #define PASSWORD "87654321" // Time of timeout for a conexão pedida #define TIMEOUT 2000 // Largura en altura display #define DISPLAY_WIDTH 160 #define DISPLAY_HEIGHTes 128 // Configuration 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.sv"
Ons definieer die penne, onder andere veranderlikes
// Pinos vertoon wel #definieer 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. Ons kan dit ook doen (23, 19 e 18 respectivamente) #define SDCARD_CS 15 // Pixel onde or gráfico começa horizontalmente int currentX = PLOT_MARGIN; // Objeto responsável pelo display Adafruit_ST7735 display = Adafruit_ST7735 (DISPLAY_CS, DISPLAY_DC, DISPLAY_MOSI, DISPLAY_CLK, DISPLAY_RST); // Criamos um server (kwalifikasie porta válida serve contanto que o cliente utilize a mesma porta) WiFiServer server (80); // Verskeie weergawes vir kliënte (geen kas of ESP32 em modo -stasie) met WiFiClient -kliënt; // String que recebemos do cliente String ontvang; // RSSI enviado pelo cliente para este ESP32 long rssi = 0; // Faz o controle do temporizador (interrupção por tempo) hw_timer_t *timer = NULL; // Gebruik vir die beskerming van ons ultimos std:: vektor rssiHistory;
Stel op
ongeldige opstelling () {Serial.begin (115200); setupDisplay (); // Inisialisasie of SD as (! SD.begin (SDCARD_CS)) {display.println ("Erro ao inicializar lib SD!"); } // Gebruik WiFi, amptelike bedieners en e -posse vir die opstel van WiFi (); bediener.begin (); waitForClient (); // Espera 3 segundos, limpa a tela e inicializa o Watchdog delay (3000); display.fillScreen (ST77XX_BLACK); display.setCursor (0, 0); setupWatchdog (); }
Stel WiFi op
// Toegangspunt en konfigurasie van IPvoid setupWiFi () {display.println ("Creating softAP" + String (SSID)); WiFi. Ontkoppel (); WiFi.mode (WIFI_AP); WiFi.softAPConfig (IPAddress (192, 168, 0, 1), IPAddress (192, 168, 0, 1), IPAddress (255, 255, 255, 0)); WiFi.softAP (SSID, WAGWOORD); display.println ("softAP" + string (SSID) + "geskep!"); }
Stel skerm op
// Weergawe, vertoning en oriëntasie van 'n telavoid setupDisplay () {// Inisialisasie van display.initR (INITR_BLACKTAB); // Rotaciona o conteúdo mostrado display.setRotation (3); // Om die skerm te vertoon.fillScreen (ST77XX_BLACK); }
waitForClient
void waitForClient () {display.println ("Wag vir kliënt"); // Aguarda o cliente conectar while (! (Client = server.available ())) {display.print ("."); vertraging (500); } display.println ("Kliënt gekoppel"); // 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 en setupWatchdog
// função que o temporizador irá chamar, para reiniciar of ESP32void IRAM_ATTR resetModule () {ets_printf ("(watchdog) reiniciar / n"); esp_restart_noos (); // herstel van die chip} ongeldige setupWatchdog () {timer = timerBegin (0, 80, waar); // timerID 0, div 80 // timer, callback, interrupção de borda timerAttachInterrupt (timer, & resetModule, true); // timer, tempo (ons), repetição timerAlarmWrite (timer, 10000000, waar); timerAlarmEnable (timer); // habilita a interrupção}
Lus
leemte -lus () {timerWrite (timer, 0); // reseta o temporizador (alimenta o watchdog) checkConnection (); // checa se possui conexão com of cliente readFromClient (); // lêers kan stuur na sendToClient (); // envia confirmmaçã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 () {// Ons kan nie 'n verskaffer kry as (! client.connected ()) {// 'n Klanker kan vertoon word.fillScreen (ST77XX_BLACK); display.println ("Kliënt ontkoppel"); waitForClient (); }}
readFromClient
void readFromClient () {// Espera até o cliente 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 ()) {received = client.readStringUntil ('\ n'); // Lê o texto que o cliente enviou received.remove (received.length ()-1); // Verwyder die finale rssi = client.parseInt (); // Lê o rssi que o cliente enviou clearText (); // Limp o texto display.setCursor (0, 0); // Beweeg na die wyser om die teks te vertoon om display.println ("RSSI:" + String (rssi)) te vertoon; // Mostra o RSSI no display display.println ("Ontvang:" + ontvang); // Mostra a mensagem recebida do cliente // Se a quantidade de barras do gráfico passou do limite apagamos or registro mais antigo if (rssiHistory.size () == (DISPLAY_WIDTH - 2*PLOT_MARGIN)/2) {rssiHistory.erase (rssiHistory.begin ()); } // Adiciona no final do histórico (mais recente) rssiHistory.push_back (rssi); }}
sendToClient
void sendToClient () {// Se o cliente estiver conectado enviamos de volta a mensagem com um OK if (client.connected ()) {String sending = received + "OK"; client.println (stuur); }}
komplot
leegte 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 - waarde, waarde, PLOT_COLOR); currentX += 2;}}
clearText en log
void clearText () {// Ons kan ook 'n teksversameling vir klante display.fillRect (0, 0, DISPLAY_WIDTH, 2*PLOT_MARGIN, ST77XX_BLACK) gebruik; } void log () {// Abrimos o arquivo para escrevermos no final dele File file = SD.open (FILE_PATH, FILE_APPEND); // Sien die volgende voorbeelde: (Serial.println ("Kon nie lêer oopmaak nie"); terugkeer; } // Gravamos uma linha com o tempo desde o boot, o rssi atual e a mensagem recebida String data = String (millis ()) + ";" + String (rssi) + ";" + ontvang; file.println (data); file.close (); }
Stap 9: Station.ino
Ons het die nodige biblioteke ingesluit en 'n paar parameters omskryf.
#include #include #include #include #include #include // Nome da rede que nos conectaremos. Skakel AP toe #define SSID "RSSI_Test" #define PASSWORD "87654321" #define HOST "192.168.0.1" // IP que foi configurado 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 considera a conexão pedida #define TIMEOUT 2000 // Largura e altura do display #define DISPLAY_WIDTH 160 #define DISPLAY_HEIGHT 128 // Configurações de cor, margem e taman #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"
Ons definieer die instellings wat die skerm en die SD -kaart behels.
lang telling = 0; // Contador de mensagens enviadaslong rssi = 0; // RSSI calculado String ontvang; // Mensagem de confirmmação que o AP nos envia // Pixel onde o gráfico começa horizontalmente int currentX = PLOT_MARGIN; // Gebruik vir die gebruik van 'n bediener WiFiClient -aansluiting; #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 e 18 respectivamente) #define SDCARD_CS 15 // Objeto responsável pelo display Adafruit_ST7735 display = Adafruit_ST7735 (DISPLAY_CS, DISPLAY_DC, DISPLAY_MOSI, DISPLAY_CLR,); hw_timer_t *timer = NULL; // faz o controle do temporizador (interrupção por tempo) // Gebruik vir ultimos std:: vektor rssiHistory;
Stel op
ongeldige opstelling () {setupDisplay (); // Inisialisasie of SD as (! SD.begin (SDCARD_CS)) {display.println ("Erro ao inicializar lib SD!"); } // Conecta no access point criado pelo outro ESP32 e conecta ao server setupWiFi (); connectToServer (); // Espera 3 segundos, limpa a tela e inicializa o Watchdog delay (3000); display.fillScreen (ST77XX_BLACK); display.setCursor (0, 0); setupWatchdog (); }
setupDisplay
// Weergawe, vertoning en weergawe van 'n telavoid setupDisplay () {// Inisialisasie van display.initR (INITR_BLACKTAB); // Rotaciona o conteúdo mostrado display.setRotation (1); // Laai die branco display.fillScreen (ST77XX_BLACK); display.setTextColor (ST77XX_WHITE); }
setupWiFi
// Conecta ao AP void setupWiFi () {WiFi.disconnect (); WiFi.mode (WIFI_STA); WiFi.begin (SSID, WAGWOORD); display.println ("Koppel aan" + string (SSID)); // Enquanto não estiver conectado à rede WiFi while (WiFi.status ()! = WL_CONNECTED) {delay (500); display.print ("."); } display.println (""); display.print ("gekoppel aan"); display.println (SSID); }
connectToServer
void connectToServer () {display.println ("Sokverbinding probeer"); // Gebruik 'n bediener terwyl (! Socket.connect (HOST, PORT)) {display.print ("."); vertraging (500); } display.println (); display.println ("Verbind!"); // 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 en setupWatchdog
// função que o temporizador irá chamar, para reiniciar of ESP32void IRAM_ATTR resetModule () {ets_printf ("(watchdog) reiniciar / n"); esp_restart_noos (); // herstel van die chip} ongeldige setupWatchdog () {timer = timerBegin (0, 80, waar); // timerID 0, div 80 // timer, callback, interrupção de borda timerAttachInterrupt (timer, & resetModule, true); // timer, tempo (ons), repetição timerAlarmWrite (timer, 10000000, waar); timerAlarmEnable (timer); // habilita a interrupção}
lus
leemte -lus () {timerWrite (timer, 0); // reseta o temporizador (alimenta o watchdog) 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 oma mensagem com um contador para o server readFromServer (); // espera a confirmmação do server log (); // salva um log no cartão SD vertraging (1000); // espera um segundo}
checkConnection
void checkConnection () {// Verifica a conexão with AP if (WiFi.status ()! = WL_CONNECTED) {display.fillScreen (ST77XX_BLACK); display.setCursor (0, 0); display.println ("WiFi ontkoppel"); setupWiFi (); vertraging (1000); } // verifica a conexão do socket if (! socket.connected ()) {display.fillScreen (ST77XX_BLACK); display.setCursor (0, 0); display.println ("Socket ontkoppel"); connectToServer (); vertraging (3000); display.fillScreen (ST77XX_BLACK); }}
checkRSSI
leegte kontrole RSSI () {// Verifikasie van RSSI rssi = WiFi. RSSI (); // Beperk die teks en die meeste o RSSI geen vertoning clearText (); display.setCursor (0, 0); display.print ("RSSI:" + string (rssi)); // Kyk na 'n kwantitatiewe dekking van 'n beperkte aantal van die antistieke as (rssiHistory.size () == (DISPLAY_WIDTH - 2*PLOT_MARGIN)/2) {rssiHistory.erase (rssiHistory.begin ()); } // Adiciona no final do histórico (mais recente) rssiHistory.push_back (rssi); }
komplot
leegte 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 - waarde, waarde, PLOT_COLOR); currentX += 2;}}
sendToServer
void sendToServer () {// Se estiver conectado com o server if (socket.connected ()) {// Envia um hello com um contador, mostra no display e incrementa o contador String sending = "Hello" + String (count); display.setCursor (0, 10); display.println ("Stuur:" + stuur); socket.println (stuur); socket.print (String (rssi)); tel ++; }}
readFromServer
void readFromServer () {// Espera até o server enviar algo ou desconectar while (socket.connected () &&! socket.available ()) {delay (100); } // Se tem algo para receber if (socket.available ()) {// As u soek, kan u dit verwyder en uiteindelik geen vertoning ontvang nie = socket.readStringUntil ('\ n'); ontvang.verwyder (ontvang.lengte ()-1); display.println ("Ontvang:" + ontvang); }}
clearText en log
void clearText () {// Ons kan ook 'n teksversameling vir klante display.fillRect (0, 0, DISPLAY_WIDTH, 2*PLOT_MARGIN, ST77XX_BLACK) gebruik; } void log () {// Abrimos o arquivo para escrevermos no final dele File file = SD.open (FILE_PATH, FILE_APPEND); // Sien die volgende voorbeelde: (Serial.println ("Kon nie lêer oopmaak nie"); terugkeer; } // Gravamos uma linha com o tempo desde o boot, o rssi atual e a mensagem recebida String data = String (millis ()) + ";" + String (rssi) + ";" + ontvang; file.println (data); file.close (); }
Stap 10: lêers
Laai die lêers af:
EK NEE
Aanbeveel:
IoT- Ubidots- ESP32+langafstand-draadlose-vibrasie- en temperatuur-sensor: 7 stappe
IoT- Ubidots- ESP32+langafstand-draadlose-vibrasie-en-temperatuur-sensor: vibrasie is werklik 'n heen en weer beweging-of ossillasie-van masjiene en komponente in gemotoriseerde toestelle. Trilling in die industriële stelsel kan 'n simptoom of 'n motief van 'n probleem wees, of dit kan verband hou met die daaglikse werking. Byvoorbeeld, osci
Esp32-Ubidots-draadloos-langafstand temperatuur en humiditeit: 6 stappe
Esp32-Ubidots-draadlose langafstand temperatuur en humiditeit: in hierdie tutoriaal meet ons verskillende temperatuur- en humiditeitsdata met behulp van temperatuur- en humiditeitsensor. U sal ook leer hoe om hierdie data na Ubidots te stuur. Sodat u dit van oral vir verskillende toepassings kan ontleed
Langafstand, 1,8 km, draadlose kommunikasie tussen Arduino en Arduino met die HC-12 .: 6 stappe (met foto's)
Long Range, 1.8km, Arduino to Arduino Wireless Communication Met die HC-12 .: In hierdie instruksies leer jy hoe om tussen Arduinos te kommunikeer oor 'n lang afstand tot 1.8km in die oop lug. Die HC-12 is 'n draadlose seriële poort baie nuttige, uiters kragtige en maklik om te gebruik kommunikasiemodule. Eerstens sal jy lees
Langafstand WiFi -skandeerder met ESP8266: 6 stappe (met foto's)
WiFi -skandeerder vir lang afstande met behulp van ESP8266: In hierdie instruksies maak ek 'n draagbare langafstand -WiFi -skanderingstoestel van 2,5 -band wat op batterye aangedryf word, wat gebruik word om te bepaal watter kanaal die beste is vir my tuisnetwerk. Dit kan ook gebruik word om oop WiFi -toegangspunte onderweg te vind. Koste om te maak: Ongeveer $ 25 dollar
Maak 'n eksterne HDD van ou eksterne CD/RW: 5 stappe
Maak 'n eksterne HDD van ou eksterne CD/RW: 'n redelike eenvoudige omskakeling van 'n ou eksterne cd/rw na 'n nuttiger eksterne hardeskyf. Toebehore 1-eksterne cd/rw (verkieslik die meer boxy-tipe) 1-hardeskyf (moet ooreenstem met die interne aansluiting van die omhulselkas, moet geformateer/gespuit word) 1-sm