Агуулгын хүснэгт:
- Алхам 1: AP -ийг Wrover ашиглан холбох
- Алхам 2: Станцыг TTGO -той угсрах
- Алхам 3: Үр дүн
- Алхам 4: LOG.CSV архивлах
- Алхам 5: Adafruit GFX номын сан
- Алхам 6: Adafruit ST7735 номын сан
- Алхам 7: Картуудыг тохируулах
- Алхам 8: AP.ino
- Алхам 9: Station.ino
- Алхам 10: Файлууд
Видео: Гадаад алсын зайн антентай ESP32: 10 алхам
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:04
Өнөөдрийн сэдэв нь гадаад антентай ESP32 ашиглан зайны туршилтын тухай юм. Өнөөдөр Espressif болон TTGO гэсэн хоёр модулийг ашиглацгаая. Дараа нь эдгээр хоёр ESP32 антенны хооронд RSSI -ийг шалгаж, түүхээс график үүсгэж,.csv файлд утгуудын бүртгэлийг бичье.
Дараа нь бид ESP32 Wrover -ийг AP, TTGO -ийн ESP32 -ийг станц болгон ашигладаг. Би арай том хэмжээтэй TP-Link болон 9dbm антен гэж нэрлэгддэг өөр чиглүүлэгчээс авсан антенаа ашигласан. Би энэ хоёрын хооронд ямар ч ялгааг анзаарсангүй.
Эцэст нь хоёр микроконтроллер нь сокетээр холбогддог бөгөөд өгөгдлийн пакет илгээх болгонд бид dbm -ийн харьцааг харуулсан баар бүхий графикийг дэлгэц дээр хэвлэдэг.
Алхам 1: AP -ийг Wrover ашиглан холбох
Алхам 2: Станцыг TTGO -той угсрах
Алхам 3: Үр дүн
2x гадаад антентай хамгийн их зай: 315 метр
Гадна болон дотоод антентай хамгийн их зай: 157 метр
Алхам 4: LOG. CSV архивлах
Би өгөгдлийг millis, 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 // Largura e altura do display #define DISPLAY_WIDTH 160 #DEFINE DISPLAY_HEQ 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_PATH "/
Бид бусад хувьсагчдын дунд голыг тодорхойлдог
// Пино нь #тодорхойлох DISPLAY_DC 12 // A0 #тодорхойлох DISPLAY_CS 13 // CS #тодорхойлох DISPLAY_MOSI 14 // SDA #тодорхойлох DISPLAY_CLK 27 // SCK #тодорхойлох DISPLAY_RST 0 // Pino do SDCard. Тохиромжтой (23, 19, 18 онуудад) #SDCARD_CS 15 -ийг тодорхойлно уу // Pixel on gráfico comesa horizontalmente int currentX = PLOT_MARGIN; // Objeto Respável pelo дэлгэц Adafruit_ST7735 дэлгэц = Adafruit_ST7735 (DISPLAY_CS, DISPLAY_DC, DISPLAY_MOSI, DISPLAY_CLK, DISPLAY_RST); // Criamos um server (клиент нь холбогдох портатив үйлчилгээг ашиглах боломжтой) WiFiServer сервер (80); // Үйлчлүүлэгчийн хувьд өөр өөр хувилбар (ESP32 эсвэл ESP32 станц байхгүй) WiFiClient үйлчлүүлэгчтэй холбогдоно уу; // String que recebemos do cliente String хүлээн авсан; // RSSI програм хангамж ESP32 урт rssi = 0; // Faz o controle do temporizador (interrupção por tempo) hw_timer_t *timer = NULL; // Utilizado para guardar os ultimos std:: vector rssiHistory;
Тохируулах
void setup () {Serial.begin (115200); setupDisplay (); // Inicializa o SD if (! SD.begin (SDCARD_CS)) {display.println ("Erro ao inicializar lib SD!"); } // Нэмэлт WiFi, сервер эсвэл хэрэглэгчийн контактыг тохируулахWiFi (); server.begin (); waitForClient (); // Espera 3 сегментүүд, хязгаарлалтууд эсвэл ажиглагчдын саатал (3000); display.fillScreen (ST77XX_BLACK); display.setCursor (0, 0); setupWatchdog (); }
WiFi тохируулах
// Нэвтрэх цэгийн тохиргоо эсвэл IPvoid setupWiFi () {display.println ("SoftAP үүсгэх" + String (SSID)); WiFi.disconnect (); WiFi горим (WIFI_AP); WiFi.softAPConfig (IPAddress (192, 168, 0, 1), IPAddress (192, 168, 0, 1), IPAddress (255, 255, 255, 0)); WiFi.softAP (SSID, Нууц үг); display.println ("softAP" + String (SSID) + "үүсгэсэн!"); }
Дэлгэцийг тохируулах
// Incializa o display, muda a orientação e limpa a telavoid setupDisplay () {// Дэлгэцийн дэлгэц.initR (INITR_BLACKTAB); // Rotaciona o conteúdo mostrado display.setRotation (3); // Прото дэлгэцийг харуулах.fillScreen (ST77XX_BLACK); }
waitForClient
хүчингүй waitForClient () {display.println ("Үйлчлүүлэгчийг хүлээж байна"); // Aguarda o cliente conectar while (! (Client = server.available ())) {display.print ("."); саатал (500); } display.println ("Үйлчлүүлэгч холбогдсон"); // Хариулагчийн хариулт өгөх хугацаа // үйлчлүүлэгчийн хүсэлт.setTimeout (TIMEOUT); }
IRAM_ATTR -ийг дахин тохируулах Модуль ба тохиргооWatchdog
// funchão que o temporizador irá chamar, ESP32void IRAM_ATTR resetModule () {ets_printf ("(watchdog) reiniciar / n"); esp_restart_noos (); // reinicia o chip} void setupWatchdog () {timer = timerBegin (0, 80, үнэн); // timerID 0, div 80 // timer, callback, interrupção de borda timerAttachInterrupt (timer, & resetModule, true); // таймер, хэмнэл (us), repetição timerAlarmWrite (таймер, 10000000, үнэн); timerAlarmEnable (таймер); // хабилита ба тасалдал}
Гогцоо
void loop () {timerWrite (timer, 0); // reseta o temporizador (alimenta o watchdog) checkConnection (); // chef se possui conexão com o cliente readFromClient (); // клиент sendToClient хийх (); // envia confirmação para o cliente plot (); // mostra o gráfico de histórico de rssi log (); // salva um log no cartão SD}
холболтыг шалгана уу
void checkConnection () {// Se Cliente não estiver conectado if (! client.connected ()) {// Харилцагчийн дэлгэц.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 ()) {хүлээн авсан = client.readStringUntil ('\ n'); // Lê o texto que o cliente enviou хүлээн авсан.хассан (авсан. урт ()-1); // Remove o / n do final rssi = client.parseInt (); // Хэрэглэгчийн эрх мэдлийг арилгах ClearText (); // Limpa o texto display.setCursor (0, 0); // Move o cursor do texto para o começo do display display.println ("RSSI:" + String (rssi)); // Mostra o RSSI байхгүй дэлгэц.println ("Хүлээн авсан:" + хүлээн авсан); // Үйлчлүүлэгчийн захиалга авах нь // Хэрэв та rssiHistory.size () == (DISPLAY_WIDTH - 2*PLOT_MARGIN)/2) {rssiHistory.erase (rssiHistory.erase). Эхлэх()); } // Adiciona финал хийхгүй (хамгийн сүүлд) rssiHistory.push_back (rssi); }}
sendToClient
void sendToClient () {// Харилцагчийн хүсэлтийг хүлээн зөвшөөрөх бол хэрэв клиент.connected ()) {String Send = хүлээн авсан + "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? Газрын зураг (rssiHistory , -120, 0, 0, PLOT_SIZE)): 0; display.drawFastVLine (currentX, DISPLAY_HEIGHT - утга, утга, PLOT_COLOR); currentX += 2;}}
clearText ба бүртгэл
void clearText () {// клиентийн дэлгэц.fillRect (0, 0, DISPLAY_WIDTH, 2*PLOT_MARGIN, ST77XX_BLACK); } void log () {// Abrimos o arquivo para escrevermos no final dele Файлын файл = SD.open (FILE_PATH, FILE_APPEND); // Se não conseguimos abrir o arquivo mostramos uma mensagem de erro if (! File) {Serial.println ("Файлыг нээж чадсангүй"); буцах; } // Gravamos uma linha com o tempo desde o boot, o rssi atual e a mensagem recebida String data = String (millis ()) + ";" + String (rssi) + ";" + хүлээн авсан; file.println (өгөгдөл); file.close (); }
Алхам 9: Station.ino
Бид шаардлагатай номын сангуудыг оруулж, зарим параметрүүдийг тодорхойлсон болно.
#include #include #include #include #include #include // Nome da rede que nos conectaremos. Criado pelo AP #тодорхойлох SSID "RSSI_Test" #нууц үгийг тодорхойлох "87654321" #define HOST "192.168.0.1" // IP тохиргоог хийхгүй AP #тодорхойлох PORT 80 // Porta do sever. Qualquer porta válida contanto que seja igual nos dois arquivos // Tempo de timeout para takear to a conexão pedida #define TIMEOUT 2000 // Largura e altura do display #define DISPLAY_WIDTH 160 #DISPLAY_HEIGHT 128 -ийг тодорхойлох, // тохируулах дүрсийг тохируулах #PLOT_COLOR ST77XX_GREEN #тодорхойлох PLOT_MARGIN 20 #PLOT_SIZE -ийг тодорхойлох (DISPLAY_HEIGHT - 2*PLOT_MARGIN) // Arquivo de log no SD #FILE_PATH "/log.csv"
Бид дэлгэц болон SD карттай холбоотой тохиргоог тодорхойлдог.
урт тоолох = 0; // Contador de mensagens enviadaslong rssi = 0; // RSSI calculado String хүлээн авсан; // Mensagem de confirmação que o AP nos envia // Pixel on gráfico comesa horizontalmente int currentX = PLOT_MARGIN; // WiFiClient сокетийг ашиглах боломжтой. #DISPLAY_DC 12 -ийг тодорхойлох // A0 #DISPLAY_CS 13 -ийг тодорхойлох // CS #тодорхойлох DISPLAY_MOSI 14 // SDA #тодорхойлох DISPLAY_CLK 27 // SCK #тодорхойлох DISPLAY_RST 0 // Pino do SDCard. Төгсгөлд нь (23, 19 ба 18 хүндэтгэлтэй) #SDCARD_CS 15 -ийг тодорхойлох // Adafruit_ST7735 дэлгэцийн дэлгэцийн хариултууд = Adafruit_ST7735 (DISPLAY_CS, DISPLAY_DC, DISPLAY_MOSI, DISPLAY_MOSI) hw_timer_t *таймер = NULL; // faz o controle do temporizador (interrupção por tempo) // Хэрэглэгчийн хамгаалалт нь үнэхээр чухал юм:: vector rssiHistory;
Тохируулах
void setup () {setupDisplay (); // Inicializa o SD if (! SD.begin (SDCARD_CS)) {display.println ("Erro ao inicializar lib SD!"); } // Conecta ямар ч хандалтын цэг байхгүй ESP32 e conecta ao server setupWiFi (); connectToServer (); // Espera 3 сегментүүд, хязгаарлалтууд эсвэл ажиглагчдын саатал (3000); display.fillScreen (ST77XX_BLACK); display.setCursor (0, 0); setupWatchdog (); }
setupDisplay
// Incializa o display, muda a orientação e limpa a telavoid setupDisplay () {// Дэлгэцийн дэлгэц.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 тохируулах
// Conecta ao AP хүчингүй тохиргооWiFi () {WiFi.disconnect (); WiFi горим (WIFI_STA); WiFi.begin (SSID, PASSWORD); display.println ("Холбогдож байна" + String (SSID)); // Enquanto não estiver conectado à rede WiFi while (WiFi.status ()! = WL_CONNECTED) {саатал (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 ("Холбогдсон!"); // Тэмдэглэл нь үйлчлүүлэгчдэд зориулсан програм хангамжийн хариу үйлдэл үзүүлэх хугацаа юм. }
IRAM_ATTR -ийг дахин тохируулах Модуль ба тохиргооWatchdog
// funchão que o temporizador irá chamar, ESP32void IRAM_ATTR resetModule () {ets_printf ("(watchdog) reiniciar / n"); esp_restart_noos (); // reinicia o chip} void setupWatchdog () {timer = timerBegin (0, 80, үнэн); // timerID 0, div 80 // timer, callback, interrupção de borda timerAttachInterrupt (timer, & resetModule, true); // таймер, хэмнэл (us), repetição timerAlarmWrite (таймер, 10000000, үнэн); timerAlarmEnable (таймер); // хабилита ба тасалдал}
гогцоо
void loop () {timerWrite (timer, 0); // reseta o temporizador (alimenta o watchdog) checkConnection (); // checa se possui conexão com o server checkRSSI (); // verifica o rssi plot (); // moshina o gráfico de histórico de rssi sendToServer (); // envia uma mensagem com um contador para server readFromServer (); // серверийн бүртгэлийг баталгаажуулах (); // salva um log no cartão SD саатал (1000); // espera um segundo}
холболтыг шалгана уу
void checkConnection () {// Хэрэв бол (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); }}
шалгах RSSI
void checkRSSI () {// Verifica o RSSI rssi = WiFi. RSSI (); // Limpa o texto e mostra o RSSI дэлгэц байхгүй clearText (); display.setCursor (0, 0); display.print ("RSSI:" + String (rssi)); // Se quantidade de barras do gráfico passou do limite apagamos or registro mais antigo if (rssiHistory.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? Газрын зураг (rssiHistory , -120, 0, 0, PLOT_SIZE)): 0; display.drawFastVLine (currentX, DISPLAY_HEIGHT - утга, утга, PLOT_COLOR); currentX += 2;}}
sendToServer
void sendToServer () {// Se estiver conectado com o server if (socket.connected ()) {// Envia um hello com um contador, disptra no display e incrementa o contador String Send = "Сайн уу" + String (тоолох); display.setCursor (0, 10); display.println ("Илгээх:" + илгээх); socket.println (илгээх); сокет.хэвлэх (String (rssi)); тоолох ++; }}
readFromServer
void readFromServer () {// Espera até o server enviar algo ou desconectar while (socket.connected () &&! socket.available ()) {delay (100); } // Хүлээн авагчийг хүлээн авбал (socket.available ()) {// Хязгаарлалтыг арилга, o / n төгсгөлийг нь арилга, дэлгэц хүлээн аваагүй болно = socket.readStringUntil ('\ n'); хүлээн авсан.хасах (хүлээн авсан. урт ()-1); display.println ("Хүлээн авсан:" + хүлээн авсан); }}
clearText ба бүртгэл
void clearText () {// клиентийн дэлгэц.fillRect (0, 0, DISPLAY_WIDTH, 2*PLOT_MARGIN, ST77XX_BLACK); } void log () {// Abrimos o arquivo para escrevermos no final dele Файлын файл = SD.open (FILE_PATH, FILE_APPEND); // Se não conseguimos abrir o arquivo mostramos uma mensagem de erro if (! File) {Serial.println ("Файлыг нээж чадсангүй"); буцах; } // Gravamos uma linha com o tempo desde o boot, o rssi atual e a mensagem recebida String data = String (millis ()) + ";" + String (rssi) + ";" + хүлээн авсан; file.println (өгөгдөл); file.close (); }
Алхам 10: Файлууд
Файлуудыг татаж авах:
INO
Зөвлөмж болгож буй:
Алсын зайн оюутнуудад зориулсан сургуулийн хонх: 6 алхам
Алсын зайн оюутнуудад зориулсан сургуулийн хонх: COVID-19 тахлын улмаас олон хүүхдийн сургууль холын зайн сургалтанд хамрагдах болсон. Энэхүү гэрийн сургуулийн хонх нь Raspberry Pi болон USB чанга яригч ашигладаг хуваарийн дагуу байх хөгжилтэй арга юм. Та үүнийг хүүхэдтэйгээ хийж чадна, тэд програмчлалын талаар сурч чадна
Raspberry Pi DIY Telegram бүхий алсын зайн халдлага илрүүлэгч систем: 7 алхам
Telegram бүхий Raspberry Pi DIY алсын халдагчийг илрүүлэх систем: Энэхүү төсөлд та PIR мэдрэгч ашиглан гадуур явж байхад танай байшин / өрөөнд хэн нэгэн байгаа эсэхийг шалгах, хэрэв PIR мэдрэгч хэн нэгнийг илрүүлсэн бол танд хэрэгтэй болно. халдагчийн зураг (ууд). Зураг
IRduino: Arduino алсын удирдлага - Алдагдсан алсын зайн дууриамал: 6 алхам
IRduino: Arduino Remote Control - Алдагдсан алсын удирдлагыг дуурайгаарай: Хэрэв та ТВ эсвэл DVD тоглуулагчийнхаа алсын удирдлагыг алдаж байсан бол төхөөрөмж дээрх товчлуур руу алхаж, хайж олох, ашиглах нь ямар их урам хугарахыг та мэднэ. Заримдаа эдгээр товчлуурууд нь алсын удирдлагатай ижил функцийг санал болгодоггүй. Хүлээн авах
Антентай "ebay" флаш алсын триггер дамжуулагч дээрх үр дүнтэй зайг нэмэгдүүлэх: 6 алхам
Антентай "ebay" флаш алсын триггер дамжуулагч дээрх үр дүнтэй зайг нэмэгдүүлэх: Камер сонирхогчид гадуур флэш төхөөрөмжүүдийн алсын триггерүүдийн хямд хувилбарыг худалдан авч, халуун гутал эсвэл "студи" төрлийн флаш төхөөрөмжүүдийг хянаж болно. Эдгээр өдөөгч нь дамжуулагчийн чадал багатай тул үр дүнтэй хяналтын зай бага байдаг. Энэ сар
Хуучин гадаад CD/RW -ээс гадаад HDD хийх: 5 алхам
Хуучин гадаад CD/RW -ээс гадаад HDD хийх: Хуучин гадаад cd/rw -ийг илүү ашигтай гадаад хатуу диск болгон шууд урвуу хөрвүүлэх. Нийлүүлэлт1-гадаад cd/rw (илүү хайрцаг хэлбэртэй байвал зохимжтой) 1 хатуу диск (хөтчийн хайрцагны дотоод холбогчтой тохирч байх ёстой, форматлах/системд оруулах шаардлагатай) 1-см