Turinys:
- 1 žingsnis: AP montavimas naudojant „Wrover“
- 2 žingsnis: STOTO su TTGO surinkimas
- 3 žingsnis: REZULTATAS
- 4 veiksmas: archyvuokite LOG.CSV
- 5 veiksmas: „Adafruit GFX“biblioteka
- 6 veiksmas: „Adafruit ST7735“biblioteka
- 7 veiksmas: kortelių konfigūravimas
- 8 žingsnis: AP.ino
- 9 žingsnis: Station.ino
- 10 veiksmas: failai
Video: ESP32 su išorine tolimojo ryšio antena: 10 žingsnių
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:47
Šiandienos tema susijusi su nuotoliniu testu su ESP32 su išorine antena. Šiandien naudokime du modulius: iš „Espressif“ir „TTGO“. Tada patikrinkime RSSI tarp šių dviejų ESP32 antenų, sugeneruosime diagramą iš istorijos ir įrašysime reikšmių žurnalą į.csv failą.
Tada mes turime ESP32 Wrover kaip AP, o TTGO ESP32 - kaip stotį. Aš naudoju anteną, kurią paėmiau iš šiek tiek didesnės TP-Link ir kito maršrutizatoriaus, žinomo kaip 9 dB. Aš nepastebėjau jokio skirtumo tarp šių dviejų.
Galiausiai du mikrovaldikliai jungiasi per lizdą ir, kiekvieną kartą siunčiant duomenų paketus, ekrane spausdiname grafiką su juostomis, nurodančiomis dbm santykį.
1 žingsnis: AP montavimas naudojant „Wrover“
2 žingsnis: STOTO su TTGO surinkimas
3 žingsnis: REZULTATAS
Maksimalus atstumas su 2x išorinėmis antenomis: 315 metrai
Maksimalus atstumas su išorine ir vidine antena: 157 metrai
4 veiksmas: archyvuokite LOG. CSV
Aš įrašiau duomenis į SD kortelę, duomenis milis, dbm ir paketo eilutę.
5 veiksmas: „Adafruit GFX“biblioteka
„Arduino IDE“eikite į Eskizas-> Įtraukti biblioteką-> Tvarkyti bibliotekas …
Įdiekite „Adafruit GFX“biblioteką
6 veiksmas: „Adafruit ST7735“biblioteka
„Arduino IDE“eikite į Eskizas-> Įtraukti biblioteką-> Tvarkyti bibliotekas …
Įdiekite „Adafruit ST7735“
7 veiksmas: kortelių konfigūravimas
Sekite skirtumus:
8 žingsnis: AP.ino
Mes įtraukėme reikalingas bibliotekas ir apibrėžėme kai kuriuos parametrus.
#include #include #include #include #include #include // Rede que o ESP criará. Nr Station deve ser igual #define SSID "RSSI_Test" #define PASSWORD "87654321" // Tempo de timeout 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
Mes apibrėžiame kaiščius, be kitų kintamųjų
// 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 e 18 respectivamente) #define SDCARD_CS 15 // Pixel onde or gráfico começa horizontalmente int currentX = PLOT_MARGIN; // Objektinis atsakas į pelės ekraną Adafruit_ST7735 ekranas = 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) su „WiFiClient“klientu; // String que recebemos do cliente String gavo; // RSSI enviado pelo cliente para este ESP32 long rssi = 0; // Faz o controle do temporizador (interruptção por tempo) hw_timer_t *timer = NULL; // Utilizado para guardar os ultimos std:: vector rssiHistory;
Sąranka
void setup () {Serial.begin (115200); setupDisplay (); // Inicializa o SD if (! SD.begin (SDCARD_CS)) {display.println ("Erro ao inicializar lib SD!"); } // „Cria a rede WiFi“, inicializacija arba serverio ir espera ar klientų sąsajos sąrankaWiFi (); server.begin (); waitForClient (); // Espera 3 segundos, limpa a tela e inicializa o Watchdog delay (3000); display.fillScreen (ST77XX_BLACK); display.setCursor (0, 0); setupWatchdog (); }
Nustatykite „WiFi“
// „Cria um Access Point“ir „IPvoid setupWiFi“konfigūracija () {display.println ("SoftAP kūrimas" + eilutė (SSID)); „WiFi.disconnect“(); „WiFi.mode“(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" + eilutė (SSID) + "sukurta!"); }
Sąrankos ekranas
// Incializa o display, muda a orientação e limpa a telavoid setupDisplay () {// Inicializa o display display.initR (INITR_BLACKTAB); // Rotaciona o conteúdo mostrado display.setRotation (3); // Paruoškite ekraną. Užpildykite ekraną (ST77XX_BLACK); }
waitForClient
void waitForClient () {display.println ("Laukiama kliento"); // Aguarda o cliente conectar while (! (Client = server.available ())) {display.print ("."); vėlavimas (500); } display.println („Klientas prijungtas“); // 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 ("(watchdog) 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 (timer, & resetModule, true); // timer, tempo (us), repetição timerAlarmWrite (timer, 10000000, true); timerAlarmEnable (laikmatis); // habilita a interrupção}
Kilpa
void loop () {timerWrite (laikmatis, 0); // reseta o temporizador (alimenta o watchdog) checkConnection (); // checa se possui conexão com o cliente 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 () {// Žr. kliento não estiver conectado if (! client.connected ()) {// Limpa a tela e espera pelo cliente display.fillScreen (ST77XX_BLACK); display.println („Klientas atjungtas“); 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 ()) {gavo = client.readStringUntil ('\ n'); // Lê o texto que o cliente enviou gavo.remove (gavo.length ()-1); // Pašalinti o / n padaryti galutinį rssi = client.parseInt (); // Lê o rssi que o cliente enviou clearText (); // Limpa arba texto display.setCursor (0, 0); // Perkelti žymeklį į tekstą, kad būtų rodomas ekranas.println ("RSSI:" + Styga (rssi)); // Mostra o RSSI no display display.println ("Gautas:" + gautas); // Mostra a mensagem recebida do cliente // 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.pradėti ()); } // Skelbimas be galutinio istorijos (mais recente) rssiHistory.push_back (rssi); }}
sendToClient
void sendToClient () {// Žiūrėkite klientą, kad suprastumėte, ar jis yra menasgem com um OK if (client.connected ()) {Eilutės siuntimas = gautas + "Gerai"; client.println (siuntimas); }}
siužetas
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 - vertė, vertė, PLOT_COLOR); currentX += 2;}}
clearText ir log
void clearText () {// Limpa ir aplinkos tekstas arba teksto dainos, skirtos klientams display.fillRect (0, 0, DISPLAY_WIDTH, 2*PLOT_MARGIN, ST77XX_BLACK); } void log () {// Abrimos o arquivo para escrevermos no final dele Failo failas = SD.open (FILE_PATH, FILE_APPEND); // Se não conseguimos abrir o arquivo mostramos uma mensagem de erro if (! File) {Serial.println ("Nepavyko atidaryti failo"); grįžti; } // Gravamos uma linha com o tempo desde o boot, o rssi atual e a mensagem recebida String data = String (millis ()) + ";" + Styga (rssi) + ";" + gavo; failas.println (duomenys); file.close (); }
9 žingsnis: Station.ino
Mes įtraukėme reikalingas bibliotekas ir apibrėžėme kai kuriuos parametrus.
#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 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 accrar a conexão pedida #define TIMEOUT 2000 // Largura e altura do display #define DISPLAY_WIDTH 160 #define DISPLAY_HEIGHT 128 // Configurações 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"
Mes nustatome nustatymus, susijusius su ekranu ir SD kortele.
ilgas skaičius = 0; // Contador de mensagens enviadaslong rssi = 0; // RSSI apskaičiuota eilutė gauta; // Mensagem de confirmação que o AP nos envia // Pixel onde arba gráfico começa horizontalmente int currentX = PLOT_MARGIN; // Utilizado para conexão com or server WiFiClient socket; #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 ir 18 pagarba) #define SDCARD_CS 15 // Objekto atsakymas į pelės ekraną „Adafruit_ST7735“ekranas = „Adafruit_ST7735“(DISPLAY_CS, DISPLAY_DC, DISPLAY_MOSI, DISPLAY_CL hw_timer_t *laikmatis = NULL; // faz o controle do temporizador (interruptção por tempo) // Utilizado para guardar os ultimos std:: vector rssiHistory;
Sąranka
void setup () {setupDisplay (); // Inicializa o SD if (! SD.begin (SDCARD_CS)) {display.println ("Erro ao inicializar lib SD!"); } // „Conecta“be prieigos taško criado pelo outro ESP32 ir prijungtas prie serverio sąrankos „Wi -Fi“(); 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 orientação e limpa a telavoid setupDisplay () {// Inicializa o display display.initR (INITR_BLACKTAB); // Rotaciona o conteúdo mostrado display.setRotation (1); // Pinta tela de branco display.fillScreen (ST77XX_BLACK); display.setTextColor (ST77XX_WHITE); }
„Wi -Fi“sąranka
// „Conecta ao AP void setupWiFi“() {WiFi.disconnect (); „WiFi.mode“(WIFI_STA); WiFi.begin (SSID, PASSWORD); display.println ("Prisijungimas prie" + eilutė (SSID)); // Enquanto não estiver conectado à rede WiFi while while (WiFi.status ()! = WL_CONNECTED) {delay (500); display.print ("."); } display.println (""); display.print („Prisijungta“); display.println (SSID); }
connectToServer
void connectToServer () {display.println ("Bandoma prijungti prie lizdo"); // Espera a conexão com o server while (! Socket.connect (HOST, PORT)) {display.print ("."); vėlavimas (500); } display.println (); display.println ("Prisijungta!"); // 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 ("(watchdog) 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 (timer, & resetModule, true); // timer, tempo (us), repetição timerAlarmWrite (timer, 10000000, true); timerAlarmEnable (laikmatis); // habilita a interrupção}
kilpa
void loop () {timerWrite (laikmatis, 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 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 () {// Patikrinkite a conexão com o AP if (WiFi.status ()! = WL_CONNECTED) {display.fillScreen (ST77XX_BLACK); display.setCursor (0, 0); display.println („WiFi atjungtas“); setupWiFi (); vėlavimas (1000); } // verifica a conexão do socket if (! socket.connected ()) {display.fillScreen (ST77XX_BLACK); display.setCursor (0, 0); display.println („Lizdas atjungtas“); connectToServer (); vėlavimas (3000); display.fillScreen (ST77XX_BLACK); }}
checkRSSI
void checkRSSI () {// Verifica arba RSSI rssi = WiFi. RSSI (); // Limpa o texto e mostra o RSSI no display clearText (); display.setCursor (0, 0); display.print ("RSSI:" + eilutė (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 ()); } // Skelbimas be galutinio istorijos (mais recente) rssiHistory.push_back (rssi); }
siužetas
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 - vertė, vertė, PLOT_COLOR); currentX += 2;}}
sendToServer
void sendToServer () {// Žr. serverio prisijungimą prie serverio, jei (socket.connected ()) {// Envia um hello com um contador, mostra no display e inkremtata o contador String send = "Sveiki" + Styga (skaičius); display.setCursor (0, 10); display.println ("Siunčiama:" + siuntimas); lizdas.println (siuntimas); socket.print (Styga (rssi)); skaičiuoti ++; }}
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 ()) {// Faz a leitura, remove o / n do final e mostra no display gavo = socket.readStringUntil ('\ n'); gavo.pašalinti (gautas.ilgis ()-1); display.println ("Gautas:" + gautas); }}
clearText ir log
void clearText () {// Limpa ir aplinkos tekstas arba teksto dainos, skirtos klientams display.fillRect (0, 0, DISPLAY_WIDTH, 2*PLOT_MARGIN, ST77XX_BLACK); } void log () {// Abrimos o arquivo para escrevermos no final dele File file = SD.open (FILE_PATH, FILE_APPEND); // Se não conseguimos abrir o arquivo mostramos uma mensagem de erro if (! File) {Serial.println ("Nepavyko atidaryti failo"); grįžti; } // Gravamos uma linha com o tempo desde o boot, o rssi atual e a mensagem recebida String data = String (millis ()) + ";" + Styga (rssi) + ";" + gavo; failas.println (duomenys); file.close (); }
10 veiksmas: failai
Atsisiųskite failus:
AŠ NE
Rekomenduojamas:
Išorinė ličio jonų baterija skaitmeniniams fotoaparatams: 12 žingsnių (su nuotraukomis)
Išorinė ličio jonų baterija skaitmeniniams fotoaparatams: išorinė baterija naudinga papildomoms nuotraukoms ir vaizdo įrašams fotografuoti, nes jų talpa didesnė nei su fotoaparatu tiekiamų „LiPo“baterijų. Jie taip pat gali pakeisti sunkiai randamas baterijas atsarginėse kamerose, kurias kartais galite naudoti
ESP8266 išorinė antena: 5 žingsniai
ESP8266 išorinė antena: kartais ESP8266 reikia išorinės antenos. Pavyzdžiui, norite įdiegti ESP į metalinę dėžę kai kurioms išorinėms ar kitoms programoms, kurios yra įdiegtos dėkluose. Arba jums reikia tik stipresnio signalo. Todėl jums reikia įdiegti
Išorinė „Bluetooth“antena didesniam diapazonui!: 4 žingsniai
Išorinė „Bluetooth“antena didesniam diapazonui!: Norėjau pasiklausyti „Bluetooth“savo vietiniame „Starbucks“! bet antenos diapazonas daugelyje „Bluetooth“raktų yra toks trumpas. todėl turėjau padidinti asortimentą! Čia yra mano epinė kelionė tai padaryti. Ši nuostabių proporcijų idėja yra iš šios svetainės
Naudokite palydovinę anteną, kad pagerintumėte 3G belaidžio plačiajuosčio ryšio signalą: 4 žingsniai
Naudokite palydovinę anteną, kad pagerintumėte savo 3G belaidžio plačiajuosčio ryšio signalą: Ieškodamas greitesnės telefono ryšio alternatyvos (tai yra viskas, ką galite gauti, kur aš gyvenu Vakarų NY), radau belaidžio ryšio tiekėją, tiekiantį 3G belaidį modemą. nurodė 1,5 Mbps atsisiuntimo greitį. Dabar pagalvojau, kad tai puiku
„Huawei E160X“(„Vodafone K3565“) 3G rakto išorinė antena / korpusas: 13 žingsnių (su nuotraukomis)
„Huawei E160X“(„Vodafone K3565“) 3G rakto išorinė antena / korpusas: „K3565“raktas, kurį „Vodafone“tiekia planuodamas savo atlyginimą, yra puikus, tačiau apmaudu, kad išorinė antenos jungtis yra paslėpta po korpusu. Štai kaip nulaužti korpusą, kad pasiektumėte tą paslėptą jungtį - ir tiems, kurie nori