Mundarija:
- 1 -qadam: APni Wrover yordamida o'rnatish
- 2 -qadam: STATUSni TTGO bilan yig'ish
- 3 -qadam: natija
- 4 -qadam: LOG.CSV arxivi
- 5 -qadam: Adafruit GFX kutubxonasi
- 6 -qadam: Adafruit ST7735 kutubxonasi
- 7 -qadam: kartalarni sozlash
- 8 -qadam: AP.ino
- 9 -qadam: Station.ino
- 10 -qadam: fayllar
Video: Tashqi uzoq masofali antennali ESP32: 10 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:26
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
3 -qadam: natija
2x tashqi antennalar bilan maksimal masofa: 315 metr
Tashqi va ichki antenna bilan maksimal masofa: 157 metr
4 -qadam: LOG. CSV arxivi
Men ma'lumotni millis, dbm va paketlar qatorida bo'lgan SD -kartaga yozdim.
5 -qadam: 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
Arduino IDE-da Sketch-> Kutubxonani qo'shish-> Kutubxonalarni boshqarish-ga o'ting.
Adafruit ST7735 -ni o'rnating
7 -qadam: 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:
INO
Tavsiya:
IoT- Ubidots- ESP32+uzoq masofali simsiz tebranish va harorat sensori: 7 qadam
IoT- Ubidots- ESP32+simsiz masofadan tebranish va harorat sensori: tebranish-bu chindan ham motorli gadjetlardagi mashinalar va tarkibiy qismlarning harakatlanishi yoki tebranishi. Sanoat tizimidagi tebranish muammoning alomati yoki sababi bo'lishi mumkin yoki u kundalik ish bilan bog'liq bo'lishi mumkin. Masalan, oskiy
Esp32-Ubidots-simsiz uzoq masofali harorat va namlik: 6 qadam
Esp32-Ubidots-simsiz uzoq masofali harorat va namlik: Bu darslikda biz harorat va namlik sensori yordamida har xil harorat va namlik ma'lumotlarini o'lchaymiz. Shuningdek, siz ushbu ma'lumotlarni Ubidots -ga qanday yuborishni bilib olasiz. Shunday qilib, siz uni har xil ilovalar uchun istalgan joydan tahlil qilishingiz mumkin
IoT-ThingSpeak-ESP32-uzoq masofali-simsiz-tebranish va harorat: 6 qadam
IoT-ThingSpeak-ESP32-Uzoq masofali-Simsiz-Vibratsiyali va Harorat: Ushbu loyihada biz NCD tebranishi va harorat sensori, Esp32, ThingSpeak yordamida tebranish va haroratni o'lchaymiz. - motorli gadjetlardagi mashinalar va butlovchi qismlar. I -dagi tebranish
ThingSpeak, ESP32 va uzoq masofali simsiz aloqa harorati va namligi: 5 qadam
ThingSpeak, ESP32 va uzoq masofali simsiz aloqa harorati va namligi: Ushbu darsda biz harorat va namlik sensori yordamida har xil harorat va namlik ma'lumotlarini o'lchaymiz. Bundan tashqari, ThingSpeak -ga ushbu ma'lumotlarni qanday yuborishni bilib olasiz. Shunday qilib, siz uni har xil ilovalar uchun istalgan joydan tahlil qilishingiz mumkin
Antennali "ebay" fleshli masofali tetik uzatgichidagi samarali masofani oshirish: 6 qadam
Antennali "ebay" fleshli masofadan boshqaruvchi uzatgichidagi samarali masofani oshiring: Kamera muxlislari tashqi fleshli qurilmalar uchun uzoqdan ishga tushirish qurilmalarining arzon versiyalarini sotib olishlari mumkin, bu esa issiq poyabzal yoki "studiya" tipidagi flesh-moslamalarni boshqaradi. Bu tetiklar past transmitter quvvatidan aziyat chekadi va shuning uchun boshqaruv masofasi kichik. Bu oy