Мазмұны:

Сыртқы ұзақ қашықтық антеннасы бар ESP32: 10 қадам
Сыртқы ұзақ қашықтық антеннасы бар ESP32: 10 қадам
Anonim
Image
Image
Wrover көмегімен AP орнату
Wrover көмегімен AP орнату

Бүгінгі тақырып сыртқы антеннасы бар ESP32 көмегімен қашықтықтан тестілеуге қатысты. Бүгін екі модульді қолданайық: Espressif және TTGO. Содан кейін осы екі ESP32 антеннасы арасындағы RSSI тексеріп, тарихтан график құрып,.csv файлына мәндер журналын жазайық.

Содан кейін бізде AP ретінде ESP32 Wrover, ал станция ретінде TTGO -ның ESP32 бар. Мен сәл үлкенірек TP-Link антеннасын және 9dbm антеннасы деп аталатын басқа маршрутизаторды қолдандым. Мен екеуінің арасындағы айырмашылықты байқамадым.

Ақырында, екі микроконтроллер розетка арқылы қосылады және деректер пакетін жіберген сайын біз дисплейде dbm қатынасын көрсететін жолақтары бар графикті басып шығарамыз.

1 -қадам: AP -ді Wrover көмегімен орнату

2 -қадам: TTGO көмегімен станцияны құрастыру

TTGO көмегімен станцияны құрастыру
TTGO көмегімен станцияны құрастыру

3 -қадам: НӘТИЖЕ

НӘТИЖЕ
НӘТИЖЕ
НӘТИЖЕ
НӘТИЖЕ
НӘТИЖЕ
НӘТИЖЕ

2x сыртқы антенналармен максималды қашықтық: 315 метр

Сыртқы және ішкі антеннасы бар максималды қашықтық: 157 метр

4 -қадам: LOG. CSV мұрағаты

LOG. CSV мұрағаты
LOG. CSV мұрағаты
LOG. CSV мұрағаты
LOG. CSV мұрағаты

Мен деректерді миллис, dbm және пакеттік жолмен SD картасына жаздым.

5 -қадам: Adafruit GFX кітапханасы

Adafruit GFX кітапханасы
Adafruit GFX кітапханасы

Arduino IDE-де Sketch-> Кітапхананы қосу-> Кітапханаларды басқару бөліміне өтіңіз.

Adafruit GFX кітапханасын орнатыңыз

6 -қадам: Adafruit ST7735 кітапханасы

Adafruit ST7735 кітапханасы
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 -қадам: файлдар

Файлдарды жүктеңіз:

PDF

МЕН ЖОҚ

Ұсынылған: