Orodha ya maudhui:

ESP32 Pamoja na Antena ya Umbali Mrefu wa nje: Hatua 10
ESP32 Pamoja na Antena ya Umbali Mrefu wa nje: Hatua 10

Video: ESP32 Pamoja na Antena ya Umbali Mrefu wa nje: Hatua 10

Video: ESP32 Pamoja na Antena ya Umbali Mrefu wa nje: Hatua 10
Video: Introduction to M5Stack Core2 ESP32 2" Display Development Module -Robojax 2024, Julai
Anonim
Image
Image
Kuweka AP na Wrover
Kuweka AP na Wrover

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

Mkutano wa STATION na TTGO
Mkutano wa STATION na TTGO

Hatua ya 3: MATOKEO

MATOKEO
MATOKEO
MATOKEO
MATOKEO
MATOKEO
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

Jalada LOG. CSV
Jalada LOG. CSV
Jalada LOG. CSV
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

Maktaba ya Adafruit GFX
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

Maktaba ya Adafruit ST7735
Maktaba ya Adafruit ST7735

Katika IDE ya Arduino, nenda kwenye Mchoro-> Jumuisha Maktaba-> Dhibiti Maktaba…

Sakinisha Adafruit ST7735

Hatua ya 7: Kusanidi Kadi

Kusanidi Kadi
Kusanidi Kadi
Kusanidi Kadi
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:

PDF

INO

Ilipendekeza: