Мазмуну:
- 1 -кадам: APди Wrover менен орнотуу
- 2 -кадам: TTGO менен СТАНЦИЯНЫ чогултуу
- 3 -кадам: ЖЫЙЫНТЫК
- 4 -кадам: Archive LOG.CSV
- 5 -кадам: Adafruit GFX китепканасы
- 6 -кадам: Adafruit ST7735 китепканасы
- 7 -кадам: Карталарды конфигурациялоо
- 8 -кадам: AP.ino
- 9 -кадам: Station.ino
- 10 -кадам: Файлдар
Video: ESP32 тышкы антенна менен: 10 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:41
Бүгүнкү тема тышкы антеннасы бар ESP32 менен дистанциялык тестке байланыштуу. Бүгүн эки модулду колдонолу: Espressifтен жана TTGOдон. Келгиле анда RSSIди ушул эки ESP32 антеннасынын ортосунда текшерип, тарыхтан график түзүп,.csv файлына баалуулуктардын журналын жазалы.
Андан кийин бизде ESP32 Wrover AP, ал эми TTGOнын ESP32 станциясы катары. Мен бир аз чоңураак TP-Linkтен алган антеннаны жана 9dbm антенна деп аталган башка роутерди колдондум. Мен экөөнүн айырмасын байкаган жокмун.
Акырында, эки микроконтроллер розетка аркылуу туташат жана ар бир маалымат пакетин жөнөтүүдө биз dbm катышын көрсөткөн тилкелери бар графикти дисплейге басып чыгарабыз.
1 -кадам: APди Wrover менен орнотуу
2 -кадам: TTGO менен СТАНЦИЯНЫ чогултуу
3 -кадам: ЖЫЙЫНТЫК
2x тышкы антенналар менен максималдуу аралык: 315 метр
Тышкы жана ички антенна менен максималдуу аралык: 157 метр
4 -кадам: Archive LOG. CSV
Мен маалыматтарды миллис, 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 #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 -кадам: Файлдар
Файлдарды жүктөп алыңыз:
МЕН ЖОК
Сунушталууда:
EXP GDC Beast колдонгон ноутбуктар үчүн тышкы VGA / GPU: 15 кадам (сүрөттөр менен)
EXP GDC Beast колдонгон ноутбуктар үчүн тышкы VGA / GPU: Hi Guys .. Бул менин көрсөтмөлөр боюнча биринчи окуу куралым. Англис тили менин биринчи тилим эмес, андыктан грамматикалык каталарымды кечир. Мен муну ноутбукту жаңыртуудагы тажрыйбама таянып жасадым. Мен сизди көпкө тааныштырбайм, анткени билбейм
Суу сактагыч менен WiFi автоматтык өсүмдүк азыктандыргычы - Ички/Тышкы өстүрүү - Суу өсүмдүктөрү автоматтык түрдө Алыстан Мониторинг менен: 21 кадам
WiFi суу сактагычы бар автоматтык өсүмдүк азыктандыргычы - ички/тышкы өстүрүү - суу өсүмдүктөрү автоматтык түрдө алыстан байкоо жүргүзүү менен: Бул окуу куралында биз өсүмдүктөрдү автоматтык түрдө сугаруучу жана Adosia платформасынын жардамы менен алыстан көзөмөлгө алына турган жабык/сырткы өсүмдүктөрдү багуу тутумун кантип орнотууну көрсөтөбүз
ESP8266 үчүн тышкы антенна: 5 кадам
ESP8266 үчүн тышкы антенна: Кээде ESP8266 үчүн тышкы антенна керек болот. Мисалы, сиз ESPти кээ бир сырттан же учурларда орнотулган башка колдонмолор үчүн металл кутуга орноткуңуз келет. Же сизге көбүрөөк сигналдын күчү керек. Андыктан орнотууңуз керек
HF антенна анализатору Arduino жана DDS модулу менен: 6 кадам (сүрөттөр менен)
HF Antenna Analyzer with Arduino and DDS Module: HiIn this Instructable мен сизге антеннаны өлчөөчү жана HS жыштык тилкелеринин баарында же анын VSWRин көрсөтө ала турган арзан антенна анализаторун кантип курганымды көрсөтөм. Ал минималдуу VSWRди жана ар бир диапазонго тиешелүү жыштыкту табат, бирок
Эски тышкы CD/RWден тышкы HDD жасаңыз: 5 кадам
Эски Тышкы CD/RWден Тышкы HDD жасаңыз: Эски тышкы cd/rwди алда канча пайдалуу тышкы катуу дискке түздөн -түз өзгөртүү. Тапшырмалар1-тышкы cd/rw (көбүнчө кутучалуу түрү) 1-катуу диск (диск корпусунун ички туташтыргычына дал келиши керек, форматталышы/системалануусу керек) 1-см