Мазмұны:
- 1 -қадам: AP -ді Wrover көмегімен орнату
- 2 -қадам: TTGO көмегімен станцияны құрастыру
- 3 -қадам: НӘТИЖЕ
- 4 -қадам: LOG.CSV мұрағаты
- 5 -қадам: Adafruit GFX кітапханасы
- 6 -қадам: Adafruit ST7735 кітапханасы
- 7 -қадам: карталарды конфигурациялау
- 8 -қадам: AP.ino
- 9 -қадам: Station.ino
- 10 -қадам: файлдар
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:26
Бүгінгі тақырып сыртқы антеннасы бар ESP32 көмегімен қашықтықтан тестілеуге қатысты. Бүгін екі модульді қолданайық: Espressif және TTGO. Содан кейін осы екі ESP32 антеннасы арасындағы RSSI тексеріп, тарихтан график құрып,.csv файлына мәндер журналын жазайық.
Содан кейін бізде AP ретінде ESP32 Wrover, ал станция ретінде TTGO -ның ESP32 бар. Мен сәл үлкенірек TP-Link антеннасын және 9dbm антеннасы деп аталатын басқа маршрутизаторды қолдандым. Мен екеуінің арасындағы айырмашылықты байқамадым.
Ақырында, екі микроконтроллер розетка арқылы қосылады және деректер пакетін жіберген сайын біз дисплейде dbm қатынасын көрсететін жолақтары бар графикті басып шығарамыз.
1 -қадам: AP -ді Wrover көмегімен орнату
2 -қадам: TTGO көмегімен станцияны құрастыру
3 -қадам: НӘТИЖЕ
2x сыртқы антенналармен максималды қашықтық: 315 метр
Сыртқы және ішкі антеннасы бар максималды қашықтық: 157 метр
4 -қадам: LOG. CSV мұрағаты
Мен деректерді миллис, dbm және пакеттік жолмен SD картасына жаздым.
5 -қадам: Adafruit GFX кітапханасы
Arduino IDE-де Sketch-> Кітапхананы қосу-> Кітапханаларды басқару бөліміне өтіңіз.
Adafruit GFX кітапханасын орнатыңыз
6 -қадам: Adafruit ST7735 кітапханасы
Arduino IDE-де Sketch-> Кітапхананы қосу-> Кітапханаларды басқару бөліміне өтіңіз.
Adafruit ST7735 орнатыңыз
7 -қадам: карталарды конфигурациялау
Айырмашылықтарға назар аударыңыз:
8 -қадам: AP.ino
Біз қажетті кітапханаларды енгіздік және кейбір параметрлерді анықтадық.
#қосу #қосу #қосу #қосу #қосу #қосу // Rede que o ESP criará. No Station deve ser igual #deffine SSID «RSSI_Test» #«87654321» ЖҰПУ СӨЗІН анықтаңыз // Уақыттың ұзақтығы анықталсын #TIMEOUT 2000 2000 белгіленсін #DISPLAY_WIDTH 160 анықтаңыз #ДИСПЛЕЙГИ 120ДЕЙНА ДЕЙНА cor, margem e tamanho do gráfico #анықтаңыз PLOT_COLOR ST77XX_GREEN #анықтаңыз PLOT_MARGIN 20 #анықтаңыз PLOT_SIZE (DISPLAY_HEIGHT - 2*PLOT_MARGIN) // Arquivo de log no SD #FILE. PATV «»/
Біз басқа айнымалылармен қатар түйреуіштерді анықтаймыз
// Пинос дисплейде #Definition DISPLAY_DC 12 // A0 #DISPLAY_CS 13 анықтайды // CS #define DISPLAY_MOSI 14 // SDA #define DISPLAY_CLK 27 // SCK #define DISPLAY_RST 0 // Pino do SDCard. Мысалы, SDCARD_CS 15 -ті белгілеу // ағымдағыX = PLOT_MARGIN; // Objeto Respável pelo дисплейі Adafruit_ST7735 дисплейі = Adafruit_ST7735 (DISPLAY_CS, DISPLAY_DC, DISPLAY_MOSI, DISPLAY_CLK, DISPLAY_RST); // Criamos сервері (клиент портативті портфельді пайдалану арқылы қызмет көрсетеді) WiFiServer сервері (80); // Әр түрлі клиенттер үшін (ESP32 стандартты станциясы жоқ) WiFiClient клиенті; // String que recebemos do cliente String алды; // RSSI клиенттері үшін ESP32 ұзын rssi = 0; // Уақытша бақылау (уақыт аралығы) hw_timer_t *таймер = NULL; // Пайдалану ережелері: rssiHistory векторы;
Орнату
void setup () {Serial.begin (115200); setupDisplay (); // Егер SD болса (! SD.begin (SDCARD_CS)) {display.println («Erro ao inicializar lib SD!»); } // Wi -Fi желісін жаңарту, серверді орнату және клиенттерді орнатуWiFi (); server.begin (); waitForClient (); // Espera 3 сегменті, бақылау және қарауылдың кешігуі (3000); display.fillScreen (ST77XX_BLACK); display.setCursor (0, 0); setupWatchdog (); }
WiFi орнату
// IPvoid setupWiFi () {display.println («SoftAP құру» + Жол (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» + Жол (SSID) + «жасалды!»); }
Дисплейді орнату
// Дисплейде дисплей, дисплейде орнатуDisplay () {// Display.initR (INITR_BLACKTAB) дисплейі; // Rotaciona o conteúdo mostrado display.setRotation (3); // Pinta a tela de preto display.fillScreen (ST77XX_BLACK); }
waitForClient
void waitForClient () {display.println («Клиентті күту»); // Aguarda o cliente conectar while (! (Client = server.available ())) {display.print («.»); кешіктіру (500); } display.println («Клиент қосылған»); // Тапсырыс беруші клиентке жауап берушіге жауап береді // клиентке тапсырыс беру кезінде клиент.setTimeout (TIMEOUT); }
IRAM_ATTR resetModule және setupWatchdog
// ESP32void IRAM_ATTR resetModule () {ets_printf («(watchdog) reiniciar / n») ESP32 жүйесінен бас тарту; esp_restart_noos (); // reinicia o chip} void setupWatchdog () {timer = timerBegin (0, 80, true); // timerID 0, div 80 // timer, backback, interrupção de borda timerAttachInterrupt (таймер, & resetModule, ақиқат); // таймер, темп (us), timerAlarmWrite (таймер, 10000000, ақиқат); timerAlarmEnable (таймер); // хабар алмасу}
Цикл
void loop () {timerWrite (таймер, 0); // қалпына келтіру (уақытша бақылау) checkConnection (); // readFromClient () клиентінің мүмкіндігіне байланысты шешімдер; // клиент sendToClient () жасайтын болады; // envia confirmação para o cliente plot (); // тіркеу журналының тарихы (); // SD картасы жоқ карталар}
Байланысты тексеру
void checkConnection () {// Егер клиент клиентке қосылса (!) {// клиентті көрсету.fillScreen (ST77XX_BLACK); display.println («Клиент ажыратылды»); waitForClient (); }}
readFromClient
void readFromClient () {// Espera até o cliente enviar algo ou desconectar while (client.connected () &&! client.available ()) {delay (100); } // Егер сіз клиентке қызмет көрсетсеңіз, онда (client.connected ()) {alınan = client.readStringUntil ('\ n'); // Lê o texto que o cliente enviou aldı.remove (алынды.ұзындығы ()-1); // алып тастаңыз o / n do rssi = client.parseInt (); // Келесі клиентке тазалау ClearText (); // Limpa o texto display.setCursor (0, 0); // display.println («RSSI:» + String (rssi)) көрсету үшін курсорды мәтінмен жылжыту; // Mostra o RSSI жоқ display.println («Алынды:» + алынды); // Тапсырыс берушіге тапсырыс беру // Егер сіз (rssiHistory.size () == (DISPLAY_WIDTH - 2*PLOT_MARGIN)/2) {rssiHistory.erase (rssiHistory.erase).баста()); } // Adiciona финалға шықпайды (соңғы уақытта) rssiHistory.push_back (rssi); }}
sendToClient
void sendToClient () {// Егер клиентке байланыс орнатылса, егер (client.connected ()) {String yuborу = алынған + «OK»; client.println (жіберу); }}
сюжет
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); // Параметрлер гисто -фаземос немесе калькуло, сонымен қатар (int i = 0; i -120? Map (rssiHistory , -120, 0, 0, PLOT_SIZE)): 0; display.drawFastVLine (currentX, DISPLAY_HEIGHT - мән, мән, PLOT_COLOR); currentX += 2;}}
clearText және журнал
void clearText () {// display.fillRect (0, 0, DISPLAY_WIDTH, 2*PLOT_MARGIN, ST77XX_BLACK) мәтіні мен мәтіндік байланысы; } void log () {// Abrimos or arquivo para escrevermos соңғы файл жоқ файл файлы = SD.open (FILE_PATH, FILE_APPEND); // Егер (! Файл) {Serial.println («Файл ашылмады»); қайтару; } // Бастапқы жүктеудің жылдамдығы мен жылдамдығы, String data = String (millis ()) + «; + Жол (rssi) + «;» + алынды; file.println (деректер); file.close (); }
9 -қадам: Station.ino
Біз қажетті кітапханаларды енгіздік және кейбір параметрлерді анықтадық.
#қосу #қосу #қосу #қосу #қосу #қосу // Nome da rede que nos conectaremos. Criado pelo AP #SSID «RSSI_Test» анықтаңыз #PASSWORD «87654321» анықтаңыз «HOST анықтаңыз» 192.168.0.1 «// IP мекенжайы конфигурацияланбайды, AP #define PORT 80 // Porta do sever. Qualquer porta válida contanto que seja igual nos dois arquivos // уақытты анықтау үшін уақытты белгілеңіз #TIMEOUT 2000 анықтаңыз // Дисплейді_ЖАҢЫЛЫҚТЫ анықтаңыз 160 #DISPLAY_HEIGHT 128 анықтаңыз // конфигурация графигі #PLOT_COLOR ST77XX_GREEN анықтау #PLOT_MARGIN 20 анықтау
Біз дисплей мен SD картасына қатысты параметрлерді анықтаймыз.
ұзақ санау = 0; // Contador de mensagens enviadaslong rssi = 0; // RSSI калькуляциясы String алынды; // Mensagem de Confirmação que AP AP nos envia // Pixel on gráfico comesa горизонтальды ағымдағыX = PLOT_MARGIN; // WiFiClient розеткасының байланысы үшін; #disine DISPLAY_DC 12 // A0 #disine DISPLAY_CS 13 // CS #define DISPLAY_MOSI 14 // SDA #deine DISPLAY_CLK 27 // SCK #define DISPLAY_RST 0 // Pino do SDCard. Мысалы, SDCARD_CS 15 анықтаңыз // Adafruit_ST7735 дисплейі = Adafruit_ST7735 (DISPLAY_CS, DISPLAY_DC, DISPLAY_MOSI, DISPLAY_MOSI) SDCARD_CS 15 анықтаңыз. hw_timer_t *таймер = NULL; // уақытша бақылау (уақыттың жылдамдығы) // Қолдану ережелері: sts:: vector rssiHistory;
Орнату
void setup () {setupDisplay (); // Егер SD болса (! SD.begin (SDCARD_CS)) {display.println («Erro ao inicializar lib SD!»); } // Conecta кіру нүктесі жоқ ESP32 немесе серверді орнатуWiFi (); connectToServer (); // Espera 3 сегменті, телефондық бақылау немесе қарауылдың кешігуі (3000); display.fillScreen (ST77XX_BLACK); display.setCursor (0, 0); setupWatchdog (); }
орнатуDisplay
// Дисплейде дисплей, дисплейде орнатуDisplay () {// Display.initR (INITR_BLACKTAB) дисплейі; // Rotaciona o conteúdo mostrado display.setRotation (1); // Pinta a tela de branco display.fillScreen (ST77XX_BLACK); display.setTextColor (ST77XX_WHITE); }
Wi -Fi орнату
// Connect ao AP void setupWiFi () {WiFi.disconnect (); WiFi.mode (WIFI_STA); WiFi.begin (SSID, PASSWORD); display.println («Қосылу» + Жолға (SSID)); // Enquanto não estiver conectado à rede WiFi while (WiFi.status ()! = WL_CONNECTED) {delay (500); display.print («.»); } display.println («»); display.print («Қосылды»); display.println (SSID); }
connectToServer
void connectToServer () {display.println («Розетка қосылуда»); // Espera a conexão com o server while (! Socket.connect (HOST, PORT)) {display.print («.»); кешіктіру (500); } display.println (); display.println («Қосылды!»); // Тапсырыс берушіге жауап берушіге тапсырма беру // уақытты өшіру socket.setTimeout (TIMEOUT); }
IRAM_ATTR resetModule және setupWatchdog
// ESP32void IRAM_ATTR resetModule () {ets_printf («(watchdog) reiniciar / n») ESP32 жүйесінен бас тарту; esp_restart_noos (); // reinicia o chip} void setupWatchdog () {timer = timerBegin (0, 80, true); // timerID 0, div 80 // timer, backback, interrupção de borda timerAttachInterrupt (таймер, & resetModule, ақиқат); // таймер, темп (us), timerAlarmWrite (timer, 10000000, true); timerAlarmEnable (таймер); // хабар алмасу}
цикл
void loop () {timerWrite (таймер, 0); // қалпына келтіру (уақытша бақылау) checkConnection (); // checkRSSI серверін тексеру мүмкін емес; // verifica o rssi сюжеті (); // sendToServer () тарихын анықтау; // readFromServer () сервері үшін ең үлкен сұраныс; // сервер журналының расталуы (); // SD картасының кешігуі жоқ (1000); // espera um segundo}
Байланысты тексеру
жарамсыз checkConnection () {// Егер AP (WiFi.status ()! = WL_CONNECTED) {display.fillScreen (ST77XX_BLACK); display.setCursor (0, 0); display.println («WiFi ажыратылған»); setupWiFi (); кешіктіру (1000); } // verifica a conexão do socket if (! socket.connected ()) {display.fillScreen (ST77XX_BLACK); display.setCursor (0, 0); display.println («Розетка ажыратылған»); connectToServer (); кешіктіру (3000); display.fillScreen (ST77XX_BLACK); }}
checkRSSI
жарамсыз тексеруRSSI () {// RSSI RSSI = WiFi. RSSI (); // RSSI мәтіні немесе мәтіні жоқ, clearText (); display.setCursor (0, 0); display.print («RSSI:» + Жол (rssi)); // Егер сіз rissiHistory.size () == (DISPLAY_WIDTH - 2*PLOT_MARGIN)/2) {rssiHistory.erase (rssiHistory.begin ()); } // Adiciona финалға шықпайды (соңғы уақытта) rssiHistory.push_back (rssi); }
сюжет
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); // Параметрлер гисто -фаземос немесе калькуло жасау, сонымен қатар (int i = 0; i -120? Map (rssiHistory , -120, 0, 0, PLOT_SIZE)): 0; display.drawFastVLine (currentX, DISPLAY_HEIGHT - мән, мән, PLOT_COLOR); currentX += 2;}}
sendToServer
void sendToServer () {// Егер серверде байланыс орнатылса (socket.connected ()) {// Envia um hello com um contador, disptra no display a incrementa or contador String yuborу = «Сәлем» + Жол (санау); display.setCursor (0, 10); display.println («Жіберу:» + жіберу); socket.println (жіберу); socket.print (String (rssi)); санау ++; }}
readFromServer
void readFromServer () {// Espera até o server enviar algo ou desconectar while (socket.connected () &&! socket.available ()) {delay (100); } // Алынған жағдайда, егер (socket.available ()) {// Файлды өшірсеңіз, жойыңыз / n ақырында ешқандай дисплей қабылданбады = socket.readStringUntil ('\ n'); қабылданды.жою (алынды.ұзындығы ()-1); display.println («Алынған:» + алынды); }}
clearText және журнал
void clearText () {// display.fillRect (0, 0, DISPLAY_WIDTH, 2*PLOT_MARGIN, ST77XX_BLACK) мәтіндік мәтінің мәтінін енгізу; } void log () {// Abrimos or arquivo para escrevermos соңғы файл жоқ файл файлы = SD.open (FILE_PATH, FILE_APPEND); // Егер (! Файл) {Serial.println («Файл ашылмады»); қайтару; } // Бастапқы жүктеудің жылдамдығы мен жылдамдығы, String data = String (millis ()) + «; + Жол (rssi) + «;» + алынды; file.println (деректер); file.close (); }
10 -қадам: файлдар
Файлдарды жүктеңіз:
МЕН ЖОҚ
Ұсынылған:
ESP8266 сыртқы антеннасы: 5 қадам
ESP8266 үшін сыртқы антенна: Кейде сізге ESP8266 үшін сыртқы антенна қажет болады. Мысалы, сіз ESP -ті металл қорапқа кейбір сыртқы немесе басқа жағдайларда орнатылатын етіп орнатқыңыз келеді. Немесе сізге тек сигнал күші қажет. Сондықтан сізге орнату керек
Ұзақ диапазондағы сымсыз су деңгейінің көрсеткіші 1 км -ге дейінгі қашықтық - Жеті деңгей: 7 қадам
Ұзақ диапазондағы сымсыз су деңгейінің көрсеткіші 1 км -ге дейінгі қашықтық | Жеті деңгей: Youtube желісінде қараңыз: https://youtu.be/vdq5BanVS0YСіз 100-200 метрге дейінгі диапазонды қамтамасыз ететін сымды және сымсыз су деңгейінің көптеген индикаторларын көрген боларсыз. Бірақ бұл нұсқаулықта сіз ұзақ қашықтықтағы сымсыз су деңгейін көресіз
Wifi сигнал сүзгісі (WokFi) ұзақ қашықтық: 3 қадам (суреттермен)
Wifi Signal Strainer (WokFi) ұзақ қашықтығы: Бұл нұсқаулықта мен жалпы WiFi Thumbdrive -ді Wi -Fi кеңейткішіне айналдырамын! қаладағы нүктелер мен желіге қосылыңыз
Аралықты ұлғайту үшін сыртқы Bluetooth антеннасы: 4 қадам
Кеңейту үшін сыртқы Bluetooth антеннасы!: Мен жергілікті Starbucks -те блютузды тыңдағым келді! бірақ көптеген Bluetooth ключкаларындағы антеннаның диапазоны өте қысқа. сондықтан диапазонды ұлғайтуға тура келді! Міне, бұл менің эпикалық саяхатым. Бұл керемет пропорциялар туралы идея осы сайттан алынған
Huawei E160X (Vodafone K3565) 3G Dongle сыртқы антеннасы / корпусы: 13 қадам (суреттермен)
Huawei E160X (Vodafone K3565) 3G Dongle сыртқы антеннасы / корпусы: Vodafone ақылы төлейтін K3565 кілті өте жақсы, бірақ сыртқы антеннаның қосқышы корпустың астында жасырылған. Міне, жасырын қосқышқа кіру үшін корпусты бұзу әдісі - және қалайтындар үшін