Мазмуну:

ESP32 тышкы антенна менен: 10 кадам
ESP32 тышкы антенна менен: 10 кадам

Video: ESP32 тышкы антенна менен: 10 кадам

Video: ESP32 тышкы антенна менен: 10 кадам
Video: Как использовать ESP32 WiFi и Bluetooth с Arduino IDE, полная информация с примерами и кодом. 2024, Ноябрь
Anonim
Image
Image
Wrover менен AP орнотуу
Wrover менен AP орнотуу

Бүгүнкү тема тышкы антеннасы бар ESP32 менен дистанциялык тестке байланыштуу. Бүгүн эки модулду колдонолу: Espressifтен жана TTGOдон. Келгиле анда RSSIди ушул эки ESP32 антеннасынын ортосунда текшерип, тарыхтан график түзүп,.csv файлына баалуулуктардын журналын жазалы.

Андан кийин бизде ESP32 Wrover AP, ал эми TTGOнын ESP32 станциясы катары. Мен бир аз чоңураак TP-Linkтен алган антеннаны жана 9dbm антенна деп аталган башка роутерди колдондум. Мен экөөнүн айырмасын байкаган жокмун.

Акырында, эки микроконтроллер розетка аркылуу туташат жана ар бир маалымат пакетин жөнөтүүдө биз dbm катышын көрсөткөн тилкелери бар графикти дисплейге басып чыгарабыз.

1 -кадам: APди Wrover менен орнотуу

2 -кадам: TTGO менен СТАНЦИЯНЫ чогултуу

TTGO менен СТАНЦИЯНЫ чогултуу
TTGO менен СТАНЦИЯНЫ чогултуу

3 -кадам: ЖЫЙЫНТЫК

RESULT
RESULT
RESULT
RESULT
RESULT
RESULT

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

Тышкы жана ички антенна менен максималдуу аралык: 157 метр

4 -кадам: Archive 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 #define SSID "RSSI_Test" #"POSWORD" аныктоо "87654321" // Убакыт узартуу убактысы эске алынат #2000 аныктоо TIMEOUT 2000 // Largura e altura do display #define DISPLAY_WIDTH 160 #Define DISPLAY_HEPS 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 "/

Биз башка өзгөрмөлөрдүн арасында казыктарды аныктайбыз

// Пинолор дисплейди #аныктайт 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. Туура эмес маалымат (23, 19 жана 18 курстар) #decine SDCARD_CS 15 // Pixel on gráfico comesa Horizontalmente int currentX = PLOT_MARGIN; // Объекттин жооптору Alofruit_ST7735 дисплейи = Adafruit_ST7735 (DISPLAY_CS, DISPLAY_DC, DISPLAY_MOSI, DISPLAY_CLK, DISPLAY_RST); // Criamos um server (кардарлар тейлөө кызматын көрсөтөт) WiFiServer сервери (80); // Кардарлардын ар кандай варианттары (эч кандай ESP32 станциясы жок) WiFiClient кардары менен байланышат; // String que recebemos do cliente String алынды; // RSSI кардарлары ESP32 узак мөөнөттүү rssi = 0; // Убакыттын өтүшү менен контролдоо (темптин үзүлүшү) hw_timer_t *таймер = NULL; // Utilizado para gardar os ultimos std:: vector rssiHistory;

Жайгашуу

void setup () {Serial.begin (115200); setupDisplay (); // Эгерде SD! } // Wi -Fi тармагын жаңыртуу, орнотуу серверин орнотуу же орнотууWiFi (); server.begin (); waitForClient (); // Эспера 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" + String (SSID) + "түзүлгөн!"); }

Дисплейди орнотуу

// Дисплейди көрсөтүү, орнотуу дисплейин орнотууDisplay () {// Display display.initR (INITR_BLACKTAB); // Rotaciona or conteúdo mostrado display.setRotation (3); // Прото дисплейди көрсөтүү.fillScreen (ST77XX_BLACK); }

waitForClient

Void waitForClient () {display.println ("Клиент күтүлүүдө"); // Кардарлар менен байланышуу учурунда (! (Client = server.available ())) {display.print ("."); кечигүү (500); } display.println ("Кардар туташты"); // Тапшырмаларды аткаруучу кардарды тейлөөнүн деморардык вариантын аткарат // клиентти алмаштыруу клиентке туура келет.setTimeout (TIMEOUT); }

IRAM_ATTR resetModule жана setupWatchdog

// ESP32void IRAM_ATTR resetModule () {ets_printf ("(watchdog) reiniciar / n") үчүн ESP32void'дин жаңы функциялары; esp_restart_noos (); // reinicia o chip} void setupWatchdog () {timer = timerBegin (0, 80, true); // timerID 0, div 80 // timer, callback, interrupção de timerAttachInterrupt (таймер, & resetModule, true); // таймер, темп (us), repetição timerAlarmWrite (таймер, 10000000, чыныгы); timerAlarmEnable (таймер); // каттуу жана үзгүлтүксүз}

Loop

void loop () {timerWrite (timer, 0); // баштапкы абалга келтирүү (көзөмөлдөөчү) checkConnection (); // readFromClient () менен кардарлар сүйлөшүүлөрдү жүргүзүшөт; // sendToClient () менен кардарлар иштешет; // envia confirmação para cliente plot (); // rssi журналынын тарыхы (); // salva um log no cartão SD}

checkConnection

жараксыз текшерүүConnection () {// Кардар жок болсо (! 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 алды.remove (алынды.length ()-1); // алып салуу / n акыркы rssi = client.parseInt (); // Келгиле, кардарды тазалоо clearText (); // Текстти көрсөтүү.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).begin ()); } // 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? Карта (rssiHistory , -120, 0, 0, PLOT_SIZE): 0; display.drawFastVLine (currentX, DISPLAY_HEIGHT - мааниси, мааниси, PLOT_COLOR); currentX += 2;}}

clearText жана журнал

void clearText () {// DisplaypfileRect (0, 0, DISPLAY_WIDTH, 2*PLOT_MARGIN, ST77XX_BLACK) менен чектелген текстти колдонуу; } void log () {// Abrimos or arquivo para escrevermos no final dele File file = SD.open (FILE_PATH, FILE_APPEND); // Каттоодон баш тартуу, эгерде (! Файл) {Serial.println ("Файл ачылбай калды"); кайтуу; } // Gravamos жүктөө убактысы келгенде, ал жүктөлүп алынганда, String data = String (millis ()) + "; + Сап (rssi) + ";" + алынды; file.println (маалыматтар); file.close (); }

9 -кадам: Station.ino

Биз керектүү китепканаларды киргиздик жана кээ бир параметрлерди аныктадык.

#кошуу #кошуу #кошуу #кошуу #кошуу #кошуу // Nome da rede que nos conectaremos. Criado pelo AP #define SSID "RSSI_Test" #PASSWORD "87654321" #define HOST "192.168.0.1" // IP конфигурациясы жок AP #define PORT 80 // Porta do sever. Qualquer porta válida contanto que seja igual nos dois arquivos // Tempo de timeout paraare to see a conexão pedida #define TIMEOUT 2000 // Largura e altura do display #define DISPLAY_WITH 160 #define DISPLAY_HEIGHT 128 // Конфигурация графиктери, #аныктоо PLOT_COLOR ST77XX_GREEN #аныктоо PLOT_MARGIN 20 #аныктоо PLOT_SIZE (DISPLAY_HEIGHT - 2*PLOT_MARGIN) // Arquivo de log no SD #Fine_PATH "/log.csv"

Биз дисплейди жана SD картаны камтыган орнотууларды аныктайбыз.

long count = 0; // Contad de mensagens enviadaslong rssi = 0; // RSSI calculado String алынды; // Mensagem de confirmação que AP AP nos envia // Pixel on gráfico comesa Horizontalmente int currentX = PLOT_MARGIN; // WiFiClient розеткасынын жардамы менен; #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. Туура эмес маалымат (23, 19 жана 18 урматтоолор) #SDCARD_CS 15ти аныктоо // Adafruit_ST7735 дисплейдеги жоопторду көрсөтүү = Adafruit_ST7735 (DISPLAY_CS, DISPLAY_DC, DISPLAY_MOSI, DISPLAY_MOSI) hw_timer_t *таймер = NULL; // убактылуу контролдоо (темптин үзгүлтүккө учурашы) // Пайдалануу үчүн стр:: вектор rssiHistory;

Жайгашуу

void setup () {setupDisplay (); // Эгерде SD! } // Conecta кирүү түйүнү жок ESP32 же серверди орнотуу wiFi (); connectToServer (); // Эспера 3 сегментте, чектөөлөрдө же күзөттө кечигүү (3000); display.fillScreen (ST77XX_BLACK); display.setCursor (0, 0); setupWatchdog (); }

setupDisplay

// Дисплейди көрсөтүү, орнотуу дисплейин орнотууDisplay () {// Display display.initR (INITR_BLACKTAB); // Rotaciona or conteúdo mostrado display.setRotation (1); // Pinta a brano display.fillScreen (ST77XX_BLACK); display.setTextColor (ST77XX_WHITE); }

setupWiFi

// Conecta же AP жараксыз setupWiFi () {WiFi.disconnect (); WiFi.mode (WIFI_STA); WiFi.begin (SSID, PASSWORD); display.println ("Туташуу" + String (SSID)); // Wi -Fi'ны жаңыртып жатканда (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 ("Туташты!"); // Тапшырмаларды аткаруу үчүн кардарлар деморардык жоопторду алышты // жоопторду табуу socket.setTimeout (TIMEOUT); }

IRAM_ATTR resetModule жана setupWatchdog

// ESP32void IRAM_ATTR resetModule () {ets_printf ("(watchdog) reiniciar / n") үчүн ESP32void'дин жаңы функциялары; esp_restart_noos (); // reinicia o chip} void setupWatchdog () {timer = timerBegin (0, 80, true); // timerID 0, div 80 // timer, callback, interrupção de timerAttachInterrupt (таймер, & resetModule, true); // таймер, темп (us), repetição timerAlarmWrite (таймер, 10000000, чыныгы); timerAlarmEnable (таймер); // каттуу жана үзгүлтүксүз}

цикл

void loop () {timerWrite (timer, 0); // баштапкы абалга келтирүү (көзөмөлдөөчү) checkConnection (); // checkRSSI серверин текшерүү (); // verifica o rssi plot (); // sendToServer () тарыхынын тарыхы жана тарыхы; // readFromServer () үчүн серверге кирүү мүмкүнчүлүгү; // сервер журналын ырастоо (); // salva um log no cartão SD delay (1000); // эспера ум сегундо}

checkConnection

жараксыз текшерүүConnection () {// 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 версиясы = WiFi. RSSI (); // Текст же RSSI жок дисплей clearText (); display.setCursor (0, 0); display.print ("RSSI:" + String (rssi)); // Кандайдыр бир деңгээлде каттоодон өтүү керек, эгерде (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 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 () {// Server if estiver conectado com if if (socket.connected ()) {// Envia um hello com um contador, no display no incrementa or contador String Send = "Hello" + String (count); display.setCursor (0, 10); display.println ("Жөнөтүү:" + жөнөтүү); socket.println (жөнөтүү); socket.print (String (rssi)); count ++; }}

readFromServer

жараксыз readFromServer () {// Эспера серверинин эң чоң мүмкүнчүлүгү болсо, ал эми (socket.connected () &&! socket.available ()) {delay (100); } // Туура эмес болсо, анда (socket.available ()) {// Негизги, өчүрүү / n жасоо акыркы жолу жок дисплей алынды = socket.readStringUntil ('\ n'); алынган.чыгаруу (алынган.олон ()-1); display.println ("Алынган:" + алынды); }}

clearText жана журнал

void clearText () {// DisplaypfileRect (0, 0, DISPLAY_WIDTH, 2*PLOT_MARGIN, ST77XX_BLACK) менен чектелген текстти колдонуу; } void log () {// Abrimos or arquivo para escrevermos no final dele File file = SD.open (FILE_PATH, FILE_APPEND); // Каттоодон баш тартуу, эгерде (! Файл) {Serial.println ("Файл ачылбай калды"); кайтуу; } // Gravamos жүктөө убактысы келгенде, ал жүктөлүп алынганда, String data = String (millis ()) + "; + Сап (rssi) + ";" + алынды; file.println (маалыматтар); file.close (); }

10 -кадам: Файлдар

Файлдарды жүктөп алыңыз:

PDF

МЕН ЖОК

Сунушталууда: