Агуулгын хүснэгт:

Гадаад алсын зайн антентай ESP32: 10 алхам
Гадаад алсын зайн антентай ESP32: 10 алхам

Видео: Гадаад алсын зайн антентай ESP32: 10 алхам

Видео: Гадаад алсын зайн антентай ESP32: 10 алхам
Видео: Насан туршдаа хэрэглэх Англи хэллэгүүд — Дахин дахин сонсож амархан сур 2024, Долдугаар сарын
Anonim
Image
Image
AP -ийг Wrover ашиглан холбох
AP -ийг Wrover ашиглан холбох

Өнөөдрийн сэдэв нь гадаад антентай ESP32 ашиглан зайны туршилтын тухай юм. Өнөөдөр Espressif болон TTGO гэсэн хоёр модулийг ашиглацгаая. Дараа нь эдгээр хоёр ESP32 антенны хооронд RSSI -ийг шалгаж, түүхээс график үүсгэж,.csv файлд утгуудын бүртгэлийг бичье.

Дараа нь бид ESP32 Wrover -ийг AP, 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 архив

Би өгөгдлийг millis, 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 // 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: Файлууд

Файлуудыг татаж авах:

PDF

INO

Зөвлөмж болгож буй: