Mündəricat:

Xarici Uzaq Antenalı ESP32: 10 addım
Xarici Uzaq Antenalı ESP32: 10 addım

Video: Xarici Uzaq Antenalı ESP32: 10 addım

Video: Xarici Uzaq Antenalı ESP32: 10 addım
Video: Uzaq sahillərdə (1958) 2024, Iyul
Anonim
Image
Image
AP -nin Wrover ilə quraşdırılması
AP -nin Wrover ilə quraşdırılması

Bugünkü mövzu Xarici Antenalı ESP32 ilə məsafə testinə aiddir. Bu gün iki moduldan istifadə edək: Espressif və TTGO -dan. Gəlin bu iki ESP32 antenası arasındakı RSSI -ni yoxlayaq, tarixdən bir qrafik yaradaq və.csv faylına dəyərlərin qeydini yazaq.

Daha sonra AP olaraq ESP32 Wrover və Stansiya olaraq TTGO -nun ESP32 -ə sahibik. Bir az daha böyük TP-Linkdən aldığım bir antenadan və 9dbm anten kimi tanınan başqa bir yönləndiricidən istifadə etdim. İkisi arasında heç bir fərq görmədim.

Nəhayət, iki mikrokontrolör yuva vasitəsi ilə əlaqə qurur və hər bir məlumat paketini göndərərkən, ekranda dbm nisbətini göstərən çubuqları olan bir qrafik çap edirik.

Addım 1: AP -ni Wrover ilə quraşdırın

Addım 2: TTGO ilə STATION -ın montajı

TTGO ilə stansiyanın montajı
TTGO ilə stansiyanın montajı

Addım 3: NƏTİCƏ

NƏTİCƏ
NƏTİCƏ
NƏTİCƏ
NƏTİCƏ
NƏTİCƏ
NƏTİCƏ

2x xarici antena ilə maksimum məsafə: 315 metr

Xarici və daxili antena ilə maksimum məsafə: 157 metr

Addım 4: LOG. CSV arxivləşdirin

LOG. CSV arxivi
LOG. CSV arxivi
LOG. CSV arxivi
LOG. CSV arxivi

Məlumatları millis, dbm və paket simli olan bir SD karta qeyd etdim.

Addım 5: Adafruit GFX Kitabxanası

Adafruit GFX Kitabxanası
Adafruit GFX Kitabxanası

Arduino IDE-də, Sketch-> Kitabxanaya daxil et-> Kitabxanaları İdarə et-ə gedin.

Adafruit GFX Kitabxanasını quraşdırın

Addım 6: Adafruit ST7735 Kitabxanası

Adafruit ST7735 Kitabxanası
Adafruit ST7735 Kitabxanası

Arduino IDE-də, Sketch-> Kitabxanaya daxil et-> Kitabxanaları İdarə et-ə gedin.

Adafruit ST7735 quraşdırın

Addım 7: Kartları konfiqurasiya edin

Kartların konfiqurasiyası
Kartların konfiqurasiyası
Kartların konfiqurasiyası
Kartların konfiqurasiyası

Fərqliliklərdən xəbərdar olun:

Addım 8: AP.ino

Lazımi kitabxanaları daxil etdik və bəzi parametrləri təyin etdik.

#daxil edin #daxil edin #daxil edin #daxil edin #daxil edin // daxil edin ESP criará. No Station deve ser igual #define SSID "RSSI_Test" #"PAROLU" 87654321 "təyin et // Zaman kəsilməsinin vaxtını hesabla #define TIMEOUT 2000 // LARGURA e altura do display #define DISPLAY_WIDTH 160 #define DISPLAY_HIQFIRLIQ 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_PATH "/

Digər dəyişənlər arasında pinləri təyin edirik

// Pinoslar #DISPLAY_DC 12 müəyyən edir // A0 #DISPLAY_CS 13 təyin edir // CS #DISPLAY_MOSI 14 -ü təyin edir // SDA #DISPLAY_CLK 27 // SCK #DISPLAY_RST 0 təyin edir // Pino do SDCard. Əlavə məlumat, 23 və 19 -cu illərdə #SDCARD_CS 15 -i təyin edin // Pixel və ya üfüqi üfüqi axınX = PLOT_MARGIN; // Objeto cavab üçün pelo ekran Adafruit_ST7735 ekran = Adafruit_ST7735 (DISPLAY_CS, DISPLAY_DC, DISPLAY_MOSI, DISPLAY_CLK, DISPLAY_RST); // Criamos server (WiFi xidməti müştəriyə xidmət göstərmək üçün) WiFiServer serveri (80); // Müştərilər üçün müxtəlif dəyişikliklər (ESP32 və ya heç bir modul stansiyası yoxdur) WiFiClient müştəri ilə əlaqə qurmaq; // String müştəriyə verildi String alındı; // RSSI müştəri xidməti ESP32 uzun rssi = 0; // Müvəqqəti yoxlama (tempin kəsilməsi) hw_timer_t *timer = NULL; // İstifadəçi üçün əsas şərtlər:: vektor rssiHistory;

Qurmaq

void setup () {Serial.begin (115200); setupDisplay (); // SD məlumatı varsa (! SD.begin (SDCARD_CS)) {display.println ("Erro ao inicializar lib SD!"); } // Wi -Fi -ı yenidən qurun, server və ya müştəri qurma qurğusu qurunWiFi (); server.begin (); waitForClient (); // Espera 3 sequndos və ya gözətçi gecikməsi və ya Gözətçi gecikməsi (3000); display.fillScreen (ST77XX_BLACK); display.setCursor (0, 0); setupWatchdog (); }

WiFi qurmaq

// IPvoid setupWiFi () {display.println ("SoftAP yaradılması" + String (SSID)) konfiqurasiyasına əsaslanan giriş nöqtəsi; WiFi.disconnect (); WiFi rejimi (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) + "yaradıldı!"); }

Quraşdırma Ekranı

// Göstərmək və ya göstərmək istəsəniz, DisplayDisplay () {// Display display.initR (INITR_BLACKTAB); // Rotaciona və ya monitortr.setRotation (3); // əvvəlcədən göstərilmiş ekran.fillScreen (ST77XX_BLACK); }

waitForClient

etibarsız waitForClient () {display.println ("Müştəri gözləyir"); // Müştəri xidməti işləyərkən (! (Client = server.available ())) {display.print ("."); gecikmə (500); } display.println ("Müştəri bağlı"); // Müvəqqəti cavablandırmaq üçün müştəri hazırlamaq // müştəri ilə əlaqə qurmaq müştəri.setTimeout (TIMEOUT); }

IRAM_ATTR sıfırlama Modulu və quraşdırılmasıWatchdog

// 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, interferção de timerAttachInterrupt (timer, & resetModule, true); // timer, temp (us), timerAlarmWrite (timer, 10000000, true); timerAlarmEnable (timer); // əlaqələr kəsmək}

Döngə

void loop () {timerWrite (timer, 0); // sıfırlama və ya nəzarət (yoxlama) checkConnection (); // readFromClient () ilə müştəri arasında əlaqə qurmaq; // müştəri göndərmək üçün sendToClient () əmrini yerinə yetirin; // müştəri planının təsdiqlənməsi (); // tarixə daxil olmaq üçün tarix yazmaq (); // salva um log no cartão SD}

yoxlayın Bağlantı

void checkConnection () {// Müştəri ilə əlaqə quranda (! client.connected ()) {// Müştəri ekranını göstərin.fillScreen (ST77XX_BLACK); display.println ("Müştəri əlaqəsi kəsildi"); waitForClient (); }}

readFromClient

void readFromClient () {// Espera até o cliente enviar algo ou desconectar while (client.connected () &&! client.available ()) {delay (100); } // Müştəri ilə əlaqə qurmaq istəsəniz, (client.connected ()) {alınan = client.readStringUntil ('\ n'); // İstifadəçi tərəfindən qəbul edilmiş mətnin silinməsi (alındı. Uzunluq ()-1); // o / n son rssi = müştəri.parseInt () çıxarın; // Müştəri xidmətlərini aydınlaşdırmaq üçün ClearText (); // Limon və ya mətn display.setCursor (0, 0); // Display.println ("RSSI:" + String (rssi)); // Mostra və ya RSSI göstərilmir display.println ("Alındı:" + alındı); // Müştərilərə bir xidmət təqdim etməklə // bir rüsseHistory.size () == (DISPLAY_WIDTH - 2*PLOT_MARGIN)/2) {rssiHistory.erase (rssiHistory.erase).begin ()); } // Adiciona heç bir finala çıxmadı (son olaraq) rssiHistory.push_back (rssi); }}

sendToClient

void sendToClient () {// Əgər (client.connected ()) {String göndərmə = alındı + "OK"; client.println (göndərmə); }}

süjet

void plot () {// Coloca no ponto inicial e limpamos or gráfico currentX = PLOT_MARGIN; display.fillRect (PLOT_MARGIN, 2*PLOT_MARGIN, DISPLAY_WIDTH - 2*PLOT_MARGIN, DISPLAY_HEIGHT - 2*PLOT_MARGIN, ST77XX_BLACK); // Tarix fazemos və ya cálculo etmək tamanho da barra do gráfico, desenhamos e avançamos para o próximo üçün (int i = 0; i -120? Map (rssiHistory , -120, 0, 0, PLOT_SIZE)): 0; display.drawFastVLine (currentX, DISPLAY_HEIGHT - dəyər, dəyər, PLOT_COLOR); currentX += 2;}}

clearText və log

void clearText () {// display.fillRect (0, 0, DISPLAY_WIDTH, 2*PLOT_MARGIN, ST77XX_BLACK) üçün mətn və ya mətn yazmaq lazımdır; } void log () {// Abrimos or arquivo para escrevermos a final dele Fayl faylı = SD.open (FILE_PATH, FILE_APPEND); // İstənilən halda, (! Fayl) {Serial.println ("Fayl açıla bilmədi"); qayıtmaq; } // Başlanğıcda yükləmə sürətini artırın, məlumatların təhlili String data = String (millis ()) + "; + String (rssi) + ";" + alındı; file.println (məlumatlar); file.close (); }

Addım 9: Station.ino

Lazımi kitabxanaları daxil etdik və bəzi parametrləri təyin etdik.

#daxil edin #daxil edin #daxil edin #daxil edin #daxil edin // daxil edin // Nome da rede que nos conectaremos. Criado pelo AP #define SSID "RSSI_Test" #PASSWORD "87654321" #define HOST "192.168.0.1" // IP #heç bir konfiqurasiya qurulmamışdır AP #define PORT 80 // Porta ayırın. Qualquer porta válida contanto que seja igual nos dois arquivos // Müvəqqəti hesablama müddəti #define TIMEOUT 2000 // Largura e altura display #define DISPLAY_WIDTH 160 #DISPLAY_HEIGHT 128 təyin edin // Konfiqurasiya qrafikləri #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"

Ekranı və SD Kartı əhatə edən parametrləri təyin edirik.

uzun say = 0; // Contador de mensagens enviadaslong rssi = 0; // RSSI hesablaması String alındı; // Məlumatların təsdiqlənməməsi üçün // Pixel və ya üfüqi üfüqi axınX = PLOT_MARGIN; // WiFiClient yuvası ilə əlaqə qurmaq üçün istifadə edin; #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. Əlaqə (23, 19 və 18 baxımından) #SDCARD_CS 15 -i təyin edin // Adafruit_ST7735 ekran = Adafruit_ST7735 (DISPLAY_CS, DISPLAY_DC, DISPLAY_MOSI, DISPLAY_MOSI) hw_timer_t *timer = NULL; // müvəqqəti yoxlama (tempin kəsilməsi) // İstifadəçi üçün əsas şərtlər:: vektor rssiHistory;

Qurmaq

void setup () {setupDisplay (); // SD məlumatı varsa (! SD.begin (SDCARD_CS)) {display.println ("Erro ao inicializar lib SD!"); } // Conecta heç bir giriş nöqtəsi yoxdur - ESP32 və ya server setupWiFi (); connectToServer (); // Espera 3 sequndos və ya gözətçi gecikməsi və ya gözətçi gecikməsi (3000); display.fillScreen (ST77XX_BLACK); display.setCursor (0, 0); setupWatchdog (); }

quraşdırmaDisplay

// Göstərmək və ya göstərmək istəsəniz, DisplayDisplay () {// Display display.initR (INITR_BLACKTAB); // Rotaciona və ya monitortr.setRotation (1); // Pinta a branco display.fillScreen (ST77XX_BLACK); display.setTextColor (ST77XX_WHITE); }

wifi qurmaq

// Veb qurulmaWiFi () {WiFi.disconnect (); WiFi rejimi (WIFI_STA); WiFi.begin (SSID, PASSWORD); display.println ("Qoşulmaq" + String (SSID)); // Wi -Fi -nı yeniləmək üçün (WiFi.status ()! = WL_CONNECTED) {gecikmə (500); display.print ("."); } display.println (""); display.print ("Bağlandı"); display.println (SSID); }

connectToServer

void connectToServer () {display.println ("Soket bağlantısı sınanır"); // Espera bir serverdə işləyərkən (! Socket.connect (HOST, PORT)) {display.print ("."); gecikmə (500); } display.println (); display.println ("Bağlandı!"); // Müvəqqəti cavablandırmaq üçün müştərilərə kömək etmək üçün təlimatlar // socket.setTimeout (TIMEOUT); }

IRAM_ATTR sıfırlama Modulu və quraşdırılmasıWatchdog

// 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, interferção de timerAttachInterrupt (timer, & resetModule, true); // timer, temp (us), timerAlarmWrite (timer, 10000000, true); timerAlarmEnable (timer); // əlaqələr kəsmək}

döngə

void loop () {timerWrite (timer, 0); // sıfırlama və ya nəzarət (yoxlama) checkConnection (); // server checkRSSI () ilə əlaqə qurun; // verifica o rssi plot (); // sendToServer () tarixçəsi və tarixçəsi haqqında məlumat daxil edin; // serverdən oxumaq üçün ReadFromServer () ilə əlaqə qurun; // server qeydini təsdiqləyin (); // heç bir halda SD gecikməsi yoxdur (1000); // espera um segundo}

yoxlayın Bağlantı

void checkConnection () {// AP -yə daxil olun, əgər (WiFi.status ()! = WL_CONNECTED) {display.fillScreen (ST77XX_BLACK); display.setCursor (0, 0); display.println ("WiFi bağlantısı kəsildi"); setupWiFi (); gecikmə (1000); } // verifica a socexão do socket if (! socket.connected ()) {display.fillScreen (ST77XX_BLACK); display.setCursor (0, 0); display.println ("Soket ayrıldı"); connectToServer (); gecikmə (3000); display.fillScreen (ST77XX_BLACK); }}

yoxlayın RSSI

void checkRSSI () {// Verifieda RSSI rssi = WiFi. RSSI (); // Mətn və ya RSSI -də heç bir ekran yoxdur ClearText (); display.setCursor (0, 0); display.print ("RSSI:" + String (rssi)); // Baxın və ya məhdudlaşdıra bilərsiniz, əgər (rssiHistory.size () == (DISPLAY_WIDTH - 2*PLOT_MARGIN)/2) {rssiHistory.erase (rssiHistory.begin ()); } // Adiciona heç bir finala çıxmadı (son olaraq) rssiHistory.push_back (rssi); }

süjet

void plot () {// Coloca no ponto inicial e limpamos or gráfico currentX = PLOT_MARGIN; display.fillRect (PLOT_MARGIN, 2*PLOT_MARGIN, DISPLAY_WIDTH - 2*PLOT_MARGIN, DISPLAY_HEIGHT - 2*PLOT_MARGIN, ST77XX_BLACK); // Tarix fazemos və ya cálculo etmək tamanho da barra do gráfico, desenhamos e avançamos para o próximo üçün (int i = 0; i -120? Map (rssiHistory , -120, 0, 0, PLOT_SIZE)): 0; display.drawFastVLine (currentX, DISPLAY_HEIGHT - dəyər, dəyər, PLOT_COLOR); currentX += 2;}}

sendToServer

void sendToServer () {// Əgər server (server) bağlansaydı (socket.connected ()) {// Envia um hello com um contador, heç bir ekran göstərilmir və String göndərilir = "Salam" + String (say); display.setCursor (0, 10); display.println ("Göndərilir:" + göndərmə); socket.println (göndərmə); socket.print (String (rssi)); saymaq ++; }}

readFromServer

void readFromServer () {// serverin ən çox istifadə etdiyi müddətdə (socket.connected () &&! socket.available ()) {delay (100); } // Səbəbi varsa, (socket.available ()) {// Faydalı məlumatları silin, / n son nəticədə heç bir görüntü alınmadı = socket.readStringUntil ('\ n'); alındı.kalın (alındı. uzunluq ()-1); display.println ("Alındı:" + alındı); }}

clearText və log

void clearText () {// Display.fillRect (0, 0, DISPLAY_WIDTH, 2*PLOT_MARGIN, ST77XX_BLACK) üçün mətn və ya mətn yazmaq lazımdır; } void log () {// Abrimos or arquivo para escrevermos a final dele Fayl faylı = SD.open (FILE_PATH, FILE_APPEND); // İstənilən halda, (! Fayl) {Serial.println ("Fayl açıla bilmədi"); qayıtmaq; } // Başlanğıcda yükləmə sürətini artırın, məlumatların təhlili String data = String (millis ()) + ";" + String (rssi) + ";" + alındı; file.println (məlumatlar); file.close (); }

Addım 10: Fayllar

Faylları yükləyin:

PDF

MƏN YOX

Tövsiyə: