Mündəricat:
- Addım 1: AP -ni Wrover ilə quraşdırın
- Addım 2: TTGO ilə STATION -ın montajı
- Addım 3: NƏTİCƏ
- Addım 4: LOG.CSV arxivləşdirin
- Addım 5: Adafruit GFX Kitabxanası
- Addım 6: Adafruit ST7735 Kitabxanası
- Addım 7: Kartları konfiqurasiya edin
- Addım 8: AP.ino
- Addım 9: Station.ino
- Addım 10: Fayllar
Video: Xarici Uzaq Antenalı ESP32: 10 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:46
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ı
Addım 3: 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
Məlumatları millis, dbm və paket simli olan bir SD karta qeyd etdim.
Addım 5: 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ı
Arduino IDE-də, Sketch-> Kitabxanaya daxil et-> Kitabxanaları İdarə et-ə gedin.
Adafruit ST7735 quraşdırın
Addım 7: Kartları konfiqurasiya edin
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:
MƏN YOX
Tövsiyə:
Mac üçün Raspberry Pi Uzaq Masaüstü: 11 addım
Mac üçün Raspberry Pi Uzaq Masaüstü: Pi başsız rejimdə işləyərkən Mac istifadə edərək Raspberry Pi -nin masaüstünə daxil olmaq üçün tightvnc -in necə qurulacağına dair bir dərslikdir
Sürət Nəzarəti + Arxa və Uzaq Effektli LED Chaser Circuit etmək Üç Yol: 3 Addım
Sürət Nəzarəti + Arxa və Uzaq Effektli LED Chaser Circuit etmək üçün üç yol: LED Chaser Circuit, LED -lərin bir müddət tək -tək işıqlandığı və dövrənin təkrarlanan işıq görünüşü verən bir dövrədir. bir LED Chaser Circuit etmək üçün üç fərqli yol: -1. 4017 IC2. 555 Taymer IC3
Uzaq Göstəricilər: 5 addım
Uzaqdan Göstəricilər: Alexa bacarıqları ilə işləmək üçün sadə (daha mürəkkəblik əlavə etməyin) geribildirim cihazına ehtiyacım vardı; vizual və səsli. Həmçinin CPU mənim " məftil dolabımdadır " və çıxışın görkəmli bir yerdə olması lazım idi, amma başqa cür gözə çarpmırdı
Antenalı 'ebay' Flaş Uzaqdan Tetik Vericisində Effektiv Məsafəni Artırın: 6 Addım
Antenalı 'ebay' Flaş Uzaqdan Tetik Vericisində Effektiv Məsafəni Artırın: Kamera həvəskarları ya xarici ayaqqabılar, ya da ayaqqabı və ya 'studiya' tipli flaş qurğularını idarə edərək uzaqdan tetikleyicilərin ucuz versiyalarını ala bilərlər. Bu tetikleyiciler aşağı ötürücü gücündən əziyyət çəkirlər və buna görə də kiçik effektiv idarəetmə məsafəsi. Bu ay
Köhnə Xarici CD/RW -dən Xarici HDD hazırlayın: 5 addım
Köhnə Xarici CD/RW -dən Xarici HDD hazırlayın: Köhnə bir xarici cd/rw -in daha faydalı bir xarici sabit diskinə düz bir şəkildə çevrilməsi. Təchizatlar1-xarici cd/rw (tercihen daha çox qutu tipli) 1 sabit disk (sürücü korpusunun daxili konnektoru ilə uyğun olmalıdır, formatlanmalı/sistemləşdirilməlidir) 1-sm