Mundarija:

Tashqi uzoq masofali antennali ESP32: 10 qadam
Tashqi uzoq masofali antennali ESP32: 10 qadam

Video: Tashqi uzoq masofali antennali ESP32: 10 qadam

Video: Tashqi uzoq masofali antennali ESP32: 10 qadam
Video: 8-dars | Barglarda organik moddalarning hosil bo'lishi | Onlayn biologiya 2024, Iyul
Anonim
Image
Image
APni Wrover yordamida o'rnatish
APni Wrover yordamida o'rnatish

Bugungi mavzu tashqi antennali ESP32 bilan masofaviy testga tegishli. Bugun ikkita moduldan foydalanaylik: Espressif va TTGO dan. Keling, bu ikkita ESP32 antenna orasidagi RSSIni tekshirib ko'ramiz, tarixdan grafik tuzamiz va.csv fayliga qiymatlar jurnalini yozamiz.

Keyin bizda ESP32 Wrover AP sifatida, TTGO ning ESP32 esa stansiya sifatida mavjud. Men biroz kattaroq TP-Link va 9dbm antenna deb nomlanuvchi boshqa yo'riqchidan olgan antennani ishlatardim. Men ikkalasining farqini sezmadim.

Nihoyat, ikkita mikrokontroller rozetka orqali ulanadi va har bir ma'lumot paketini yuborishda biz displeyda dbm nisbatini ko'rsatuvchi chiziqli grafikni chop etamiz.

1 -qadam: APni Wrover yordamida o'rnatish

2 -qadam: STATUSni TTGO bilan yig'ish

TTGO bilan STATUSni yig'ish
TTGO bilan STATUSni yig'ish

3 -qadam: natija

Natija
Natija
Natija
Natija
Natija
Natija

2x tashqi antennalar bilan maksimal masofa: 315 metr

Tashqi va ichki antenna bilan maksimal masofa: 157 metr

4 -qadam: LOG. CSV arxivi

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

Men ma'lumotni millis, dbm va paketlar qatorida bo'lgan SD -kartaga yozdim.

5 -qadam: Adafruit GFX kutubxonasi

Adafruit GFX kutubxonasi
Adafruit GFX kutubxonasi

Arduino IDE-da Sketch-> Kutubxonani qo'shish-> Kutubxonalarni boshqarish-ga o'ting.

Adafruit GFX kutubxonasini o'rnating

6 -qadam: Adafruit ST7735 kutubxonasi

Adafruit ST7735 kutubxonasi
Adafruit ST7735 kutubxonasi

Arduino IDE-da Sketch-> Kutubxonani qo'shish-> Kutubxonalarni boshqarish-ga o'ting.

Adafruit ST7735 -ni o'rnating

7 -qadam: kartalarni sozlash

Kartalarni sozlash
Kartalarni sozlash
Kartalarni sozlash
Kartalarni sozlash

Farqlarni kuzatishda davom eting:

8 -qadam: AP.ino

Biz kerakli kutubxonalarni kiritdik va ba'zi parametrlarni aniqladik.

#qo'shish #qo'shish #qo'shish #qo'shish #qo'shish #qo'shish // RED que o ESP criará. Hech qanday stansiya ishlab chiqmaydi #SSID "RSSI_Test" ni belgilang #"87654321" parolini aniqlang // Vaqtni aniqlash uchun vaqtni belgilang #TIME2UTni aniqlang // DISPLAY_WIDTH 160ni aniqlang #DISHIY tasvirni aniqlang 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 "/

Biz pinlarni boshqa o'zgaruvchilar qatorida aniqlaymiz

// Pinos ko'rsatiladi #DISPLAY_DC 12 ni aniqlaydi // A0 #DISPLAY_CS 13 ni aniqlaydi // CS #DISPLAY_MOSI 14 ni belgilaydi // SDA #DISPLAY_CLK 27 ni belgilaydi // SCK #DISPLAY_RST 0 ni belgilaydi // Pino do SDCard. Ya'ni, 23 -chi va 18 -chi kunlarda #SDCARD_CS 15 -ni belgilang // Pixel yoki grafika bo'yicha gorizontal chiziqli int currentX = PLOT_MARGIN; // Aloqa javoblari Alofruit_ST7735 displeyi = Adafruit_ST7735 (DISPLAY_CS, DISPLAY_DC, DISPLAY_MOSI, DISPLAY_CLK, DISPLAY_RST); // Criamos serveri (mijozga xizmat ko'rsatish sharti bilan xizmat ko'rsatish) WiFiServer serveri (80); // Mijozlar uchun standart variant (hech qanday ESP32 standarti yo'q) WiFiClient mijozi bilan; // String que recebemos do cliente String qabul qilindi; // RSSI mijozlari uchun ESP32 uzoq rssi = 0; // Faz o controle do temporizador (interrupção por temp) hw_timer_t *taymer = NULL; // Utilizado uchun juda katta vazifa: vektor rssiHistory;

Sozlash

void setup () {Serial.begin (115200); setupDisplay (); // SD -ni ishga tushirish, agar (! SD.begin (SDCARD_CS)) {display.println ("Erro ao inicializar lib SD!"); } // Wi -Fi -ni qayta o'rnatish, serverni o'rnatish yoki sozlash uchun Wi -Fi (); server.begin (); waitForClient (); // Espera 3 -ni ajratib ko'rsatish, qo'riqchi kuchining kechikishi (3000); display.fillScreen (ST77XX_BLACK); display.setCursor (0, 0); setupWatchdog (); }

WiFi -ni sozlash

// IPvoid setupWiFi () {display.println ("SoftAP yaratish" + String (SSID)) uchun kirish nuqtasi konfiguratsiyasi; 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) + "yaratilgan!"); }

Displeyni sozlash

// Displeyni ko'rsatish yoki o'chirish, ekranni o'rnatishDisplay () {// Displeyni ko'rsatish.initR (INITR_BLACKTAB); // Rotaciona yoki conteúdo mostrado display.setRotation (3); // Preto displeyni ko'rsatish.fillScreen (ST77XX_BLACK); }

waitForClient

void waitForClient () {display.println ("Mijoz kutilmoqda"); // Mijozlar bilan aloqa o'rnatilganda (! (Client = server.available ())) {display.print ("."); kechikish (500); } display.println ("Mijoz ulangan"); // Mijozlar uchun javob berish vaqtini belgilash // mijozlar bilan ishlashda mijoz.setTimeout (TIMEOUT); }

IRAM_ATTR resetModul va sozlashWatchdog

// vaqtni belgilashda, ESP32void IRAM_ATTR resetModule () {ets_printf ("(watchdog) reiniciar / n"); esp_restart_noos (); // reinicia o chip} void setupWatchdog () {timer = timerBegin (0, 80, rost); // taymerID 0, div 80 // taymer, qayta qo'ng'iroq, uzilishlar timerAttachInterrupt (taymer, & resetModule, rost); // taymer, temp (biz), takrorlash timerAlarmWrite (taymer, 10000000, rost); timerAlarmEnable (taymer); // uzilishlar}

Loop

void loop () {timerWrite (taymer, 0); // reseta o temporizador (alimenta o watchdog) checkConnection (); // mijozning readFromClient () buyrug'ini bajaring; // mijozlar sendToClient () ni bajaring; // envia confirmação para o cliente plot (); // mos yozuvlar yozuvi (logistika); // hech qanday SD karta yo'q!

ulanishni tekshiring

void checkConnection () {// Agar mijoz! display.println ("Mijoz uzildi"); waitForClient (); }}

readFromClient

void readFromClient () {// Espera até o cliente enviar algo ou desconectar while (client.connected () &&! client.available ()) {delay (100); } // Agar mijoz (mijoz.connected ()) {qabul qilingan = client.readStringUntil ('\ n'); // Lê o texto que o cliente enviou oldi.remove (olingan.length ()-1); // o'chirish o / n yakuniy rssi = client.parseInt (); // Mijozlar uchun ochiq havola clearText (); // Limfa yoki matnli displey.setCursor (0, 0); // display.println ("RSSI:" + String (rssi)) ni ko'rsatish uchun kursorni bajaring; // Mostra o RSSI displeyi displey.println ("Qabul qilingan:" + qabul qilingan); // Mijozlar uchun mijozlar ro'yxatini tuzish // Agar siz (rssiHistory.size () == (DISPLAY_WIDTH - 2*PLOT_MARGIN)/2) {rssiHistory.erase (rssiHistory.erase).boshlash()); } // Adiciona finalda hech qanday natija bermadi (mais yaqinda) rssiHistory.push_back (rssi); }}

sendToClient

void sendToClient () {// Agar mijoz (mijoz.connected ()) {String yuborish = qabul qilingan + "OK"; client.println (yuborish); }}

syujet

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); // Maqsadni aniqlash uchun fazilatlar va vazifalar bajarilishi kerak (int i = 0; i -120? Xarita (rssiHistory , -120, 0, 0, PLOT_SIZE)): 0; display.drawFastVLine (currentX, DISPLAY_HEIGHT - qiymat, qiymat, PLOT_COLOR); currentX += 2;}}

clearText va jurnal

void clearText () {// mijozga ko'rsatish.fillRect (0, 0, DISPLAY_WIDTH, 2*PLOT_MARGIN, ST77XX_BLACK) uchun matnli matnli yozuvlar; } void log () {// Abrimos o arquivo para escrevermos no final dele Fayl fayli = SD.open (FILE_PATH, FILE_APPEND); // Agar (! Fayl) {Serial.println ("Fayl ochilmadi"); qaytish; } // Gravamos yuklash tezligi, yuklash tezligi va tezligi String data = String (millis ()) + "; + String (rssi) + ";" + qabul qilingan; file.println (ma'lumotlar); file.close (); }

9 -qadam: Station.ino

Biz kerakli kutubxonalarni kiritdik va ba'zi parametrlarni aniqladik.

#qo'shish #qo'shish #qo'shish #qo'shish #qo'shish #qo'shish // Nome da rede que nos conectaremos. SSSR "RSSI_Test" kodini belgilang #PASSWORD "87654321" #define HOST "192.168.0.1" // IP -ni sozlang, AP #define PORT 80 // Porta sever. Qualquer porta válida contanto que seja igual nos dois arquivos // vaqtni belgilash uchun vaqtni belgilang #vaqtni aniqlang 2000 // LARGURA e altura displeyda #DISPLAY_HEIGHT 160ni aniqlang // tuzilmalarni aniqlang, #PLOT_COLOR ST77XX_GREENni belgilang #PLOT_MARGINni 20 belgilang #PLOT_SIZE ni aniqlang (DISPLAY_HEIGHT - 2*PLOT_MARGIN) // Arquivo de log no SD #FILE_PATH "/log.csv"

Biz displey va SD -kartani o'z ichiga olgan sozlamalarni aniqlaymiz.

uzoq hisoblash = 0; // Contens de mensagens enviadaslong rssi = 0; // RSSI hisobi String qabul qilindi; // Ishni tasdiqlash yoki tasdiqlash // Xozirgi piksellar sonini GorizontalX = PLOT_MARGIN; // WiFiClient uyasi serveri bilan ishlash; #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. Masalan, SDCARD_CS 15 ni aniqlang // Adafruit_ST7735 displeyi = Adafruit_ST7735 (DISPLAY_CS, DISPLAY_DC, DISPLAY_MOSI, DISPLAY_MOSI) #SDCARD_CS 15 ni aniqlang. hw_timer_t *taymer = NULL; // vaqtni nazorat qilish (tezlikni uzib qo'yish) // Utilizado uchun qo'riqchi vazifasini bajaradi: vektor rssiHistory;

Sozlash

void setup () {setupDisplay (); // SD -ni ishga tushirish, agar (! SD.begin (SDCARD_CS)) {display.println ("Erro ao inicializar lib SD!"); } // Conecta kirish nuqtasi yo'q ESP32 yoki serverni sozlashWiFi (); connectToServer (); // Espera 3 -ni ajratib ko'rsatish, qo'riqchi kuchining kechikishi (3000); display.fillScreen (ST77XX_BLACK); display.setCursor (0, 0); setupWatchdog (); }

sozlash Displey

// Displeyni ko'rsatish yoki o'chirish, ekranni o'rnatishDisplay () {// Displeyni ko'rsatish.initR (INITR_BLACKTAB); // Rotaciona yoki conteúdo mostrado display.setRotation (1); // Pinta tela de branco displeyi.fillScreen (ST77XX_BLACK); display.setTextColor (ST77XX_WHITE); }

Wi -Fi -ni sozlash

// Konfiguratsiya yoki APni bekor qilish setupWiFi () {WiFi.disconnect (); WiFi rejimi (WIFI_STA); WiFi.begin (SSID, PASSWORD); display.println ("Ulanish" + String (SSID)); // Enquanto não estiver conectado à rede WiFi while (WiFi.status ()! = WL_CONNECTED) {delay (500); display.print ("."); } ko'rsatish.println (""); display.print ("Ulangan"); display.println (SSID); }

connectToServer

void connectToServer () {display.println ("Soket ulanishga urinilmoqda"); // Espera serveri bir vaqtning o'zida (! Socket.connect (HOST, PORT)) {display.print ("."); kechikish (500); } ko'rsatish.println (); display.println ("Ulangan!"); // Mijozlar uchun javob tezligi // mijozlar uchun javobgarliklar // socket.setTimeout (TIMEOUT); }

IRAM_ATTR resetModul va sozlashWatchdog

// vaqtni belgilashda, ESP32void IRAM_ATTR resetModule () {ets_printf ("(watchdog) reiniciar / n"); esp_restart_noos (); // reinicia o chip} void setupWatchdog () {timer = timerBegin (0, 80, rost); // taymerID 0, div 80 // taymer, qayta qo'ng'iroq, uzilishlar timerAttachInterrupt (taymer, & resetModule, rost); // taymer, temp (biz), takrorlash timerAlarmWrite (taymer, 10000000, rost); timerAlarmEnable (taymer); // uzilishlar}

pastadir

void loop () {timerWrite (taymer, 0); // reseta o temporizador (alimenta o watchdog) checkConnection (); // checkRSSI serverini tekshirish mumkin emas; // haqiqiy rssi syujeti (); // sendToServer () tarixini aniqlash uchun mos yozuvlar; // serverni o'qish uchun ReadFromServer () ni ishlating; // server jurnalini tasdiqlash (); // salva um log no cartão SD kechikishi (1000); // espera um segundo}

ulanishni tekshiring

void checkConnection () {// AP -ni tasdiqlang, agar (WiFi.status ()! = WL_CONNECTED) {display.fillScreen (ST77XX_BLACK); display.setCursor (0, 0); display.println ("Wi -Fi uzilgan"); sozlashWiFi (); kechikish (1000); } // verifica a conexão do socket if (! socket.connected ()) {display.fillScreen (ST77XX_BLACK); display.setCursor (0, 0); display.println ("Soket uzilgan"); connectToServer (); kechikish (3000); display.fillScreen (ST77XX_BLACK); }}

checkRSSI

yaroqsiz checkRSSI () {// RSSI RSSI = WiFi. RSSI (); // RSSI -ni o'chirish yoki matnni o'chirish ClearText (); display.setCursor (0, 0); display.print ("RSSI:" + String (rssi)); // Qarang, agar (rssiHistory.size () == (DISPLAY_WIDTH - 2*PLOT_MARGIN)/2) {rssiHistory.erase (rssiHistory.begin ()); } // Adiciona finalda hech qanday natija bermadi (mais yaqinda) rssiHistory.push_back (rssi); }

syujet

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); // Maqsadni aniqlash uchun fazilatlar va vazifalar bajarilishi kerak (int i = 0; i -120? Xarita (rssiHistory , -120, 0, 0, PLOT_SIZE)): 0; display.drawFastVLine (currentX, DISPLAY_HEIGHT - qiymat, qiymat, PLOT_COLOR); currentX += 2;}}

sendToServer

void sendToServer () {// Agar serverda (socket.connected ()) bo'lsa, u holda serverni ulash mumkin {// Envia um hello com um contador, na displey no incrementa or contador String yuborish = "Salom" + String (hisoblash); display.setCursor (0, 10); display.println ("Yuborish:" + yuborish); socket.println (yuborish); socket.print (String (rssi)); hisoblash ++; }}

readFromServer

void readFromServer () {// Espera até o server enviar algo ou desconectar while (socket.connected () &&! socket.available ()) {delay (100); } // Qachonki qabul qilsa, (socket.available ()) {// Aloqani o'chiring, o'chirish / n do final e mostra no display taken = socket.readStringUntil ('\ n'); qabul qilingan. olib tashlash (olingan.length ()-1); display.println ("Qabul qilindi:" + qabul qilindi); }}

clearText va jurnal

void clearText () {// mijozga ko'rsatish.fillRect (0, 0, DISPLAY_WIDTH, 2*PLOT_MARGIN, ST77XX_BLACK) uchun matnli matnli yozuvlar; } void log () {// Abrimos o arquivo para escrevermos no final dele Fayl fayli = SD.open (FILE_PATH, FILE_APPEND); // Agar (! Fayl) {Serial.println ("Fayl ochilmadi"); qaytish; } // Gravamos yuklash tezligi, yuklash tezligi va tezligi String data = String (millis ()) + "; + String (rssi) + ";" + qabul qilingan; file.println (ma'lumotlar); file.close (); }

10 -qadam: fayllar

Fayllarni yuklab oling:

PDF

INO

Tavsiya: