Orodha ya maudhui:
- Hatua ya 1: Kuweka AP na Wrover
- Hatua ya 2: Mkutano wa STATION na TTGO
- Hatua ya 3: MATOKEO
- Hatua ya 4: Jalada LOG.CSV
- Hatua ya 5: Maktaba ya Adafruit GFX
- Hatua ya 6: Adafruit ST7735 Library
- Hatua ya 7: Kusanidi Kadi
- Hatua ya 8: AP.ino
- Hatua ya 9: Station.ino
- Hatua ya 10: Faili
Video: ESP32 Pamoja na Antena ya Umbali Mrefu wa nje: Hatua 10
2024 Mwandishi: John Day | [email protected]. Mwisho uliobadilishwa: 2024-01-30 12:53
Mada ya leo inahusu mtihani wa umbali na ESP32 na Antena ya nje. Wacha tutumie moduli mbili leo: kutoka Espressif na TTGO. Wacha tuangalie RSSI kati ya hizi antena mbili za ESP32, tengeneza grafu kutoka kwa historia, na andika logi ya maadili kwenye faili ya.csv.
Tunayo ESP32 Wrover kama AP, na ESP32 ya TTGO kama Kituo. Nilitumia antena ambayo nilichukua kutoka kwa TP-Link kubwa na router nyingine inayojulikana kama antena ya 9dbm. Sijaona tofauti yoyote kati ya hizi mbili.
Mwishowe, watawala wadogo wawili huunganisha kupitia tundu na, na kila kutuma pakiti za data, tunachapisha kwenye onyesho la grafu na baa ambazo zinaonyesha uwiano wa dbm.
Hatua ya 1: Kuweka AP na Wrover
Hatua ya 2: Mkutano wa STATION na TTGO
Hatua ya 3: MATOKEO
Umbali wa juu na antena za nje 2x: mita 315
Umbali wa juu na antenna ya nje na ya ndani: mita 157
Hatua ya 4: Jalada LOG. CSV
Nilirekodi data hiyo kwenye kadi ya SD, na data katika millis, dbm, na kamba ya kifurushi.
Hatua ya 5: Maktaba ya Adafruit GFX
Katika IDE ya Arduino, nenda kwenye Mchoro-> Jumuisha Maktaba-> Dhibiti Maktaba…
Sakinisha Maktaba ya Adafruit GFX
Hatua ya 6: Adafruit ST7735 Library
Katika IDE ya Arduino, nenda kwenye Mchoro-> Jumuisha Maktaba-> Dhibiti Maktaba…
Sakinisha Adafruit ST7735
Hatua ya 7: Kusanidi Kadi
Endelea kufuatilia tofauti:
Hatua ya 8: AP.ino
Tumejumuisha maktaba muhimu na kufafanua vigezo kadhaa.
# pamoja na # pamoja na # pamoja na # pamoja na # pamoja # #jumlisha // Rudisha que o ESP criará. Hakuna Kituo cha densi kinachofahamika #fafanua SSID "RSSI_Test" #fasili PASSWORD "87654321" // Wakati wa kumaliza muda wa kutafakari conexão pedida #define TIMEOUT 2000 // Largura e altura do show #define DISPLAY_WIDTH 160 #define DISPLAY_HEIGHT 128 // Configurações de cor, margem e tamanho do gráfico #fine PLOT_COLOR ST77XX_GREEN #fafanua PLOT_MARGIN 20 #fafanua PLOT_SIZE (DISPLAY_HEIGHT - 2 * PLOT_MARGIN) // Arquivo de log no SD #fefine FILE_PATH "/log.csv"
Tunafafanua pini, kati ya anuwai zingine
// Pinos zinaonyesha # fafanua DISPLAY_DC 12 // A0 #fafanua DISPLAY_CS 13 // CS #fafanua DISPLAY_MOSI 14 // SDA #fafanua DISPLAY_CLK 27 // SCK #fafanua DISPLAY_RST 0 // Pino do SDCard. Os pinos mosi, miso e sck são os nativos (23, 19 na 18 respectivamente) #fasili SDCARD_CS 15 // Pixel onde o gráfico começa horizontalmente int currentX = PLOT_MARGIN; // Objeto Respável pelo kuonyesha Adafruit_ST7735 onyesha = Adafruit_ST7735 (DISPLAY_CS, DISPLAY_DC, DISPLAY_MOSI, DISPLAY_CLK, DISPLAY_RST); // Criamos um server (qualification porta válida serve contanto que o cliente to use a mesma porta) Seva ya WiFiServer (80); // Variável para armazenar o cliente (no caso o ESP32 em modo station) conectado Wateja wa mteja wa WiFi; // String que recebemos do cliente Kamba iliyopokelewa; // RSSI enviado pelo cliente kwa este ESP32 rssi = 0; // Faz o controle do temporizador (interrupção por tempo) hw_timer_t * timer = NULL; // Utilizado para guardar os ultimos std:: vector rssiHistory;
Sanidi
kuanzisha batili () {Serial.begin (115200); kuanzishaDisplay (); // Inicializa o SD ikiwa (! SD.begin (SDCARD_CS)) {display.println ("Erro ao inicializar lib SD!"); } // Cria a rede WiFi, inicializa o server and espera o cliente conectar setupWiFi (); anza (); waitForClient (); // Espera 3 segundos, limpa a tela e inicializa o Watchdog delay (3000); onyesha.fillScreen (ST77XX_BLACK); onyesha.setCursor (0, 0); kuanzishaWatchdog (); }
Sanidi WiFi
// Cria um Access Point na usanidi wa IPvoid setupWiFi () {display.println ("Kuunda lainiAP" + Kamba (SSID)); Kuondoa WiFi (); Njia ya WiFi (WIFI_AP); WiFi.softAPConfig (IPAddress (192, 168, 0, 1), IPAddress (192, 168, 0, 1), IPAddress (255, 255, 255, 0)); WiFi.softAP (SSID, PASSWORD); kuonyesha.println ("softAP" + String (SSID) + "imeundwa!"); }
Sanidi Kuonyesha
// Incializa o onyesha, muda mfupi wa kuelekezwa na kuweka mipangilio ya Kuonyesha Kuonyesha () {// Inicializa o display display.initR (INITR_BLACKTAB); // Rotaciona o conteúdo mostrado display.setRotation (3); // Pinta picha ya preto display.fillScreen (ST77XX_BLACK); }
waitForClient
batili waitForClient () {display.println ("Kusubiri mteja"); // Aguarda o cliente conectar wakati (! (Mteja = server haipatikani ())) {display.print ("."); kuchelewesha (500); } onyesha.println ("Mteja ameunganishwa"); // Tempo máximo que de demente deve demorar for responder // antes de dizermos que a conexão foi perdida client.setTimeout (TIMEOUT); }
IRAM_ATTR resetModule na 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} batili setupWatchdog () {timer = timerBegin (0, 80, true); // timerID 0, div 80 // timer, callback, interrupção de borda timerAttachInterrupt (kipima muda, & resetModule, kweli); // timer, tempo (sisi), repetição timerAlarmWrite (timer, 10000000, kweli); timerAlarmEnable (timer); // habilita a interrupção}
Kitanzi
kitanzi batili () {timerWrite (timer, 0); // reseta o temporizador (alimenta o mwangalizi) angalia Uunganisho (); // checa se possui conexão com o cliente readFromClient (); // wewe ni dados kufanya 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}
kuangaliaUunganisho
batili checkConnection () {// Tazama sehemu moja ya kipata ikiwa (! mteja.meunganishwa ()) {// Toa maoni kwenye onyesho la kuonyesha.fillScreen (ST77XX_BLACK); onyesha.println ("Mteja amekatika"); waitForClient (); }}
readFromClient
utupu readFromClient () {// Espera at the o opente enviar algo ou desconectar while (mteja.meunganishwa () &&! mteja haipatikani ()) {kuchelewesha (100); } // Je! Unatafuta huduma hii ikiwa ni pamoja na kipokezi kinachopokea ikiwa (mteja. Ameunganishwa ()) {amepokea = mteja.readStringUntil ('\ n'); // Tafakari ya maandishi ambayo umepokea.ondoa (pokea. Urefu () - 1); // Ondoa o / n fanya rssi ya mwisho = mteja.parseInt (); // Unapenda kujua nini unaweza kuona wazi Nakala (); // Limpa o kuonyesha maandishi. Cursor (0, 0); // Songa mshale kufanya maandishi kwa sababu ya kuonyesha kuonyesha.println ("RSSI:" + String (rssi)); // Mostra o RSSI hakuna onyesho la onyesho.println ("Imepokelewa:" + imepokea); // Mostra a mensagem recebida do cliente // Tazama kiwango cha barbar do gráfico passou do limite apagamos o registro mais antigo if (rssiHistory.size () == (DISPLAY_WIDTH - 2 * PLOT_MARGIN) / 2) {rssiHistory.erase (rssiHistory anza ()); } // Adiciona hakuna mwisho kufanya histórico (mais recente) rssiHistory.push_back (rssi); }}
tumaMteja
batili sendToClient () {// Tazama sehemu ya upeanaji wa mfumo wa habari ikiwa ni (mteja.meunganishwa ()) {Kamba ya kutuma = imepokea + "Sawa"; mteja.println (kutuma); }}
njama
njama batili () {// Coloca no ponto inicial e limpamos o gráfico currentX = PLOT_MARGIN; onyesha.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? Ramani (rssiHistory , -120, 0, 0, PLOT_SIZE): 0; onyesha.drawFastVLine (sasaX, DISPLAY_HEIGHT - dhamana, thamani, PLOT_COLOR);
clearText na logi
batili clearText () {// Limpa a text of da mensagem vinda do cliente display.fillRect (0, 0, DISPLAY_WIDTH, 2 * PLOT_MARGIN, ST77XX_BLACK); } batili batili () {// 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 ("Imeshindwa kufungua faili"); kurudi; } // Gravamos uma linha com o tempo desde o boot, o rssi atual e a mensagem recebida String data = String (millis ()) + ";" + Kamba (rssi) + ";" + imepokea; file.println (data); faili. karibu (); }
Hatua ya 9: Station.ino
Tumejumuisha maktaba muhimu na kufafanua vigezo kadhaa.
# pamoja na # pamoja na # pamoja na # pamoja na # pamoja # # pamoja // Nome da rede que nos conectaremos. Criado pelo AP #fafanua SSID "RSSI_Test" #fasili PASSWORD "87654321" #fasili HOST "192.168.0.1" // IP que foi configurado no setup do AP #fasili PORT 80 // Porta do sever. Pata alama ya kushinda alama kwa sababu ya vitu visivyo sawa // Wakati wa kumaliza muda kwa kuzingatia hali ya kupendeza #fafanua NAMNA YA KUPITIA 2000 // Ujumbe unaonyesha #fafanua UONESHO_UWANZA 160 #fafanua UONESHA_KUUZA 128 // Configurações de cor, margem e tamanho do gráfico #fafanua PLOT_COLOR ST77XX_GREEN #fafanua PLOT_MARGIN 20 #fafanua PLOT_SIZE (DISPLAY_HEIGHT - 2 * PLOT_MARGIN) // Arquivo de log no SD #fasili FILE_PATH "/log.csv"
Tunafafanua mipangilio inayojumuisha onyesho na Kadi ya SD.
hesabu ndefu = 0; // Contador de mensagens enviadaslong rssi = 0; // Kamba ya hesabu ya RSSI imepokelewa; // Mensagem de confirmação que o AP nos envia // Pixel onde o gráfico começa horizontalmente int currentX = PLOT_MARGIN; // Utilizado para conexão com o serverMtandao wa mteja wa Wateja; #fafanua DISPLAY_DC 12 // A0 #fafanua DISPLAY_CS 13 // CS #fafanua DISPLAY_MOSI 14 // SDA #fafanua DISPLAY_CLK 27 // SCK #fafanua DISPLAY_RST 0 // Pino do SDCard. Os pinos mosi, miso e sck são os nativos (23, 19 e 18 respectivamente) #fasili SDCARD_CS 15 // Kuonyesha majibu ya kuonyesha Adafruit_ST7735 kuonyesha = Adafruit_ST7735 (DISPLAY_CS, DISPLAY_DC, DISPLAY_MOSI, DISPLAY_CLK, DISPLAY_RST); hw_timer_t * kipima muda = NULL; // faz o controle do temporizador (interrupção por tempo) // Utilizado para guardar os ultimos std:: vector rssiHistory;
Sanidi
kuanzisha batili () {setupDisplay (); // Inicializa o SD ikiwa (! SD.begin (SDCARD_CS)) {display.println ("Erro ao inicializar lib SD!"); } // Conecta hakuna kituo cha ufikiaji kinachosababisha ESP32 na kusanidi seva serverWiFi (); unganishaToServer (); // Espera 3 segundos, limpa a tela e inicializa o Watchdog delay (3000); onyesha.fillScreen (ST77XX_BLACK); onyesha.setCursor (0, 0); kuanzishaWatchdog (); }
kuanzishaDhihirisha
// Incializa o onyesha, muda mfupi wa kuelekeza na kuweka mipangilio ya Kuonyesha Kuonyesha () {// Inicializa o display display.initR (INITR_BLACKTAB); // Rotaciona o conteúdo mostrado display.setRotation (1); // Pinta a tela de branco display.fillScreen (ST77XX_BLACK); onyesha.setTextColor (ST77XX_WHITE); }
kuanzishaWiFi
// Conecta ao AP batili setupWiFi () {WiFi.disconnect (); Njia ya WiFi (WIFI_STA); Anza WiFi (SSID, HABARI); kuonyesha.println ("Kuunganisha kwa" + String (SSID)); // Enquanto não estiver conectado to rede WiFi wakati (WiFi.status ()! = WL_CONNECTED) {kuchelewesha (500); onyesho.print ("."); } onyesha.println (""); onyesho.print ("Imeunganishwa na"); onyesha.println (SSID); }
unganishaToServer
batili connectToServer () {display.println ("Kujaribu unganisho la tundu"); // Espera a conexão com o server wakati (! Socket.connect (HOST, PORT)) {display.print ("."); kuchelewesha (500); } onyesha.println (); onyesha.println ("Imeunganishwa!"); // Tempo máximo que de demente deve demorar for responder // antes de dizermos que a conexão foi perdida tocket.setTimeout (TIMEOUT); }
IRAM_ATTR resetModule na 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} batili setupWatchdog () {timer = timerBegin (0, 80, true); // timerID 0, div 80 // timer, callback, interrupção de borda timerAttachInterrupt (kipima muda, & resetModule, kweli); // timer, tempo (us), repetição timerAlarmWrite (timer, 10000000, kweli); timerAlarmEnable (timer); // habilita a interrupção}
kitanzi
kitanzi batili () {timerWrite (timer, 0); // reseta o temporizador (alimenta o watchdog) angalia Uunganisho (); // checa se possui conexão com o seva ya kuangaliaRSSI (); // verifica o rssi njama (); // mostra o gráfico de histórico de rssi sendToServer (); // envia uma mensagem com um contador para o server readFromServer (); // espera a confirmação do log log server (); // salva um log hakuna kuchelewesha kwa SD (1000); // espera um segundo}
kuangaliaUunganisho
batili checkConnection () {// Verifica a conexão com o AP if (WiFi.status ()! = WL_CONNECTED) {display.fillScreen (ST77XX_BLACK); onyesha.setCursor (0, 0); onyesha.println ("WiFi imekatika"); kuanzishaWiFi (); kuchelewesha (1000); } / onyesha.setCursor (0, 0); onyesha.println ("Soketi imekatika"); unganishaToServer (); kuchelewesha (3000); onyesha.fillScreen (ST77XX_BLACK); }}
kuangaliaRSSI
kuangalia batiliRSSI () {// Verifica o RSSI rssi = WiFi. RSSI (); // Limpa o texto na mostra o RSSI hakuna onyesho clearText (); onyesha.setCursor (0, 0); onyesho.print ("RSSI:" + String (rssi)); // Angalia idadi ya 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 ()); } // Adiciona hakuna mwisho kufanya histórico (mais recente) rssiHistory.push_back (rssi); }
njama
njama batili () {// Coloca no ponto inicial e limpamos o gráfico currentX = PLOT_MARGIN; onyesha.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? Ramani (rssiHistory , -120, 0, 0, PLOT_SIZE): 0; onyesha.drawFastVLine (sasaX, DISPLAY_HEIGHT - dhamana, thamani, PLOT_COLOR);
tumaToServer
batili sendToServer () {// Sever conectado com o server if (socket.connected ()) {// Envia um hello com um contador, mostra no display and incrementa o contador String sending = "Hello" + String (count); onyesha.setCursor (0, 10); onyesha.println ("Kutuma:" + kutuma); socket.println (kutuma); tundu.print (Kamba (rssi)); hesabu ++; }}
somaKutokaServer
utupu readFromServer () {// Espera at server oviar algo ou desconectar while (socket.connected () &&! soketi haipatikani ()) {delay (100); } // Se tem algo para receber if (soketi haipatikani ()) {// Faz a leitura, ondoa mwisho na hakuna onyesho lililopokelewa = tundu.readStringUntil ('\ n'); kupokelewa.ondoa (kupokea. urefu () - 1); onyesha.println ("Imepokelewa:" + imepokea); }}
clearText na logi
batili clearText () {// Limpa a text of da mensagem vinda do cliente display.fillRect (0, 0, DISPLAY_WIDTH, 2 * PLOT_MARGIN, ST77XX_BLACK); } batili batili () {// 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 ("Imeshindwa kufungua faili"); kurudi; } // Gravamos uma linha com o tempo desde o boot, o rssi atual e a mensagem recebida String data = String (millis ()) + ";" + Kamba (rssi) + ";" + imepokea; file.println (data); faili. karibu (); }
Hatua ya 10: Faili
Pakua faili:
INO
Ilipendekeza:
HC-12 Kituo cha hali ya hewa ya umbali mrefu na Sensorer za DHT: Hatua 9
Kituo cha hali ya hewa cha umbali mrefu cha HC-12 na Sensorer za DHT: Katika mafunzo haya tutajifunza jinsi ya kutengeneza kituo cha hali ya hewa cha mbali kwa kutumia sensorer mbili za dht, moduli za HC12 na Uonyesho wa LCD wa I2C. Tazama Video
Taa Bora za Rafiki za umbali mrefu wa DIY: Hatua 4 (na Picha)
Taa za Rafiki Bora za umbali mrefu wa DIY: Nilitengeneza taa za muda mrefu za maingiliano zinazojulikana kama " Rafiki Bora " taa. Hiyo inamaanisha tu kwamba zinawekwa kwa usawazishaji na rangi ya sasa ya taa nyingine. Kwa hivyo ikiwa ungebadilisha taa moja ya kijani, muda mfupi baada ya taa nyingine ingegeuka kuwa gree
Mzunguko wa Mfumo wa Usambazaji wa Umbali Mrefu: Hatua 6
Mzunguko wa Mfumo wa Usambazaji wa Umbali Mrefu: Leo katika nakala hii tutazungumza juu ya jinsi ya kutengeneza mzunguko wa msingi wa Mfumo wa Usambazaji wa Umbali Mrefu. Pamoja na haya, wacha nikupe picha fupi ya mzunguko. Jinsi kwa ujumla kazi hii na Jinsi ninavyozungumza na mambo kwako
Kugundua Babu Nje ya Kitanda Muda Mrefu: Hatua 7
Kugundua Babu Nje ya Kitanda Muda Mrefu: AsiliWakati kumekuwa na wachunguzi wa kengele ya kitanda kwa miaka mingi ambayo ni rahisi tu kufungwa kwa pedi ya kitanda inapiga kengele ya ndani kwa watoa huduma wakati mtu anaamka kitandani, hakujakuwa na njia ya familia ya mbali walezi kufuatilia lo
Wifi Signer Strainer (WokFi) Umbali mrefu: Hatua 3 (na Picha)
Wifi Signal Strainer (WokFi) Umbali Mrefu: Katika hii inaweza kufundisha mimi hufanya WiFi Thumbdrive ya kawaida kuwa nyongeza ya wifi ya nyuzi! inaelekeza katika mji na unganisha kwa networ