Tartalomjegyzék:
- 1. lépés: Az AP felszerelése Wroverrel
- 2. lépés: Az STATION összeszerelése TTGO -val
- 3. lépés: EREDMÉNY
- 4. lépés: Archiválja a LOG.CSV fájlt
- 5. lépés: Adafruit GFX könyvtár
- 6. lépés: Adafruit ST7735 könyvtár
- 7. lépés: A kártyák konfigurálása
- 8. lépés: AP.ino
- 9. lépés: Station.ino
- 10. lépés: Fájlok
Videó: ESP32 külső távolsági antennával: 10 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:42
A mai téma egy távolsági tesztre vonatkozik, külső antennával ellátott ESP32 -vel. Ma két modult használjunk: az Espressif -ből és a TTGO -ból. Ellenőrizzük az RSSI -t a két ESP32 antenna között, készítsünk grafikont az előzményekből, és írjunk naplót az értékekről.csv fájlba.
Ezután az ESP32 Wrover AP -ként, a TTGO ESP32 pedig Station -ként van. Antennát használtam, amelyet egy kicsit nagyobb TP-Link-ből vettem, és egy másik, 9 dBm-es antenna néven ismert útválasztót. Nem vettem észre semmi különbséget a kettő között.
Végül a két mikrokontroller aljzaton keresztül csatlakozik, és minden adatcsomag küldésekor egy grafikont nyomtatunk a kijelzőn, amelyen a sávok jelzik a dbm arányát.
1. lépés: Az AP felszerelése Wroverrel
2. lépés: Az STATION összeszerelése TTGO -val
3. lépés: EREDMÉNY
Maximális távolság 2x külső antennával: 315 méter
Maximális távolság külső és belső antennával: 157 méter
4. lépés: Archiválja a LOG. CSV fájlt
Az adatokat SD -kártyára rögzítettem, az adatokat millis, dbm -ben és a csomag karakterláncában.
5. lépés: Adafruit GFX könyvtár
Az Arduino IDE-ben lépjen a Vázlat-> Könyvtár bevonása-> Könyvtárak kezelése…
Telepítse az Adafruit GFX könyvtárat
6. lépés: Adafruit ST7735 könyvtár
Az Arduino IDE-ben lépjen a Vázlat-> Könyvtár bevonása-> Könyvtárak kezelése…
Telepítse az Adafruit ST7735 -öt
7. lépés: A kártyák konfigurálása
Kövesse velünk a különbségeket:
8. lépés: AP.ino
Felvettük a szükséges könyvtárakat és definiáltunk néhány paramétert.
#include #include #include #include #include #include // Rede que o ESP criará. No Station deve ser igual #define SSID "RSSI_Test" #define PASSWORD "87654321" // Tempo de time time para as a conexão pedida #define TIMEOUT 2000 // Largura e altura do display #define DISPLAY_WIDTH 160 #define DISPLAY_HEURIS 128 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 FILE_PATH "/log.cs
Meghatározzuk a csapokat, többek között a változókat
// Pinos do display #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. Os pinos mosi, miso e sck são os nativos (23, 19 e 18 respectivamente) #define SDCARD_CS 15 // Pixel onde or gráfico começa horizontmente int currentX = PLOT_MARGIN; // Objeto responseável pelo display Adafruit_ST7735 display = Adafruit_ST7735 (DISPLAY_CS, DISPLAY_DC, DISPLAY_MOSI, DISPLAY_CLK, DISPLAY_RST); // Criamos um szerver (qualquer porta válida serve contanto que o cliente utilize a mesma porta) WiFiServer server (80); // Variável para armazenar o cliente (no caso o ESP32 em modo station) a WiFiClient ügyféllel; // String que recebemos do cliente String fogadott; // RSSI enviado pelo cliente para este ESP32 long rssi = 0; // Faz o controle do temporizador (interruptção por tempo) hw_timer_t *timer = NULL; // Utilizado para guardar os ultimos std:: vector rssiHistory;
Beállít
void setup () {Serial.begin (115200); setupDisplay (); // Inicializa o SD if (! SD.begin (SDCARD_CS)) {display.println ("Erro ao inicializar lib SD!"); } // Cria a rede WiFi, inicializa vagy server e espera vagy cliente conectar setupWiFi (); szerver.begin (); waitForClient (); // Espera 3 segundos, limpa a tela e inicializa o Watchdog delay (3000); display.fillScreen (ST77XX_BLACK); display.setCursor (0, 0); setupWatchdog (); }
WiFi beállítása
// Cria um Access Point és konfiguráció vagy IPvoid setupWiFi () {display.println ("SoftAP létrehozása" + String (SSID)); WiFi.disconnect (); WiFi.mód (WIFI_AP); WiFi.softAPConfig (IPAddress (192, 168, 0, 1), IPAddress (192, 168, 0, 1), IPAddress (255, 255, 255, 0)); WiFi.softAP (SSID, JELSZÓ); display.println ("softAP" + String (SSID) + "létrehozva!"); }
Beállítási kijelző
// Incializa o display, muda a orienttação e limpa a telavoid setupDisplay () {// Inicializa o display display.initR (INITR_BLACKTAB); // Rotaciona o conteúdo mostrado display.setRotation (3); // Pinta a tela de preto display.fillScreen (ST77XX_BLACK); }
waitForClient
void waitForClient () {display.println ("Várakozás az ügyfélre"); // Aguarda o cliente conectar while (! (Client = server.available ())) {display.print ("."); késleltetés (500); } display.println ("Kliens csatlakoztatva"); // Tempo máximo que o cliente deve demorar para responder // antes de dizermos que a conexão foi perdida client.setTimeout (TIMEOUT); }
IRAM_ATTR resetModule and setupWatchdog
// função que o temporizador irá chamar, para reiniciar o ESP32void IRAM_ATTR resetModule () {ets_printf ("(watchdog) reiniciar / n"); esp_restart_noos (); // reinicia o chip} void setupWatchdog () {timer = timerBegin (0, 80, true); // timerID 0, div 80 // timer, callback, interrupção de borda timerAttachInterrupt (timer, & resetModule, true); // timer, tempo (us), repetição timerAlarmWrite (timer, 10000000, true); timerAlarmEnable (időzítő); // habilita a interrupção}
Hurok
void loop () {timerWrite (időzítő, 0); // reseta o temporizador (alimenta o watchdog) checkConnection (); // checa se possui conexão com o cliente readFromClient (); // lê os dados do cliente 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}
checkConnection
void checkConnection () {// Se o cliente não estiver conectado if (! client.connected ()) {// Limpa a tela e espera pelo cliente display.fillScreen (ST77XX_BLACK); display.println ("Az ügyfél leválasztva"); waitForClient (); }}
readFromClient
void readFromClient () {// Espera até o cliente enviar algo ou desconectar while (client.connected () &&! client.available ()) {delay (100); } // Se chegou aqui e ainda estiver conectado é porque possui algo para receber do cliente if (client.connected ()) {Receive = client.readStringUntil ('\ n'); // Lê o texto que o cliente enviou gavo.remove (kapott.hossz ()-1); // Eltávolítás o / n do final rssi = client.parseInt (); // Lê o rssi que o cliente enviou clearText (); // Limpa vagy texto display.setCursor (0, 0); // Mozgassa vagy mozgassa a kurzort a szöveg megjelenítéséhez. A megjelenítéshez. // Mostra vagy RSSI nincs kijelző display.println ("Fogadott:" + kapott); // Mostra a mensagem recebida do cliente // Se a quantidade de barras do gráfico passou do limite apagamos o registro mais antigo if (rssiHistory.size () == (DISPLAY_WIDTH - 2*PLOT_MARGIN)/2) {rssiHistory.erase (rssiHistory.kezdődik()); } // Adiciona no final do histórico (mais recente) rssiHistory.push_back (rssi); }}
sendToClient
void sendToClient () {// A kliens estiver conectado enviamos de volta a mensagem com um OK if (client.connected ()) {Karakterlánc küldés = kapott + "OK"; client.println (küldés); }}
cselekmény
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); // Para cada valor do histórico fazemos o cálculo do tamanho da barra do gráfico, desenhamos e avançamos para o próximo for (int i = 0; i -120? Map (rssiHistory , -120, 0, 0, PLOT_SIZE): 0; display.drawFastVLine (currentX, DISPLAY_HEIGHT - érték, érték, PLOT_COLOR); currentX += 2;}}
clearText és log
void clearText () {// Limpa a área com o texto da mensagem vinda do cliente display.fillRect (0, 0, DISPLAY_WIDTH, 2*PLOT_MARGIN, ST77XX_BLACK); } void log () {// Abrimos o arquivo para escrevermos no final dele File file = SD.open (FILE_PATH, FILE_APPEND); // Se não conseguimos abrir o arquivo mostramos uma mensagem de erro if (! File) {Serial.println ("Nem sikerült megnyitni a fájlt"); Visszatérés; } // Gravamos uma linha com o tempo desde o boot, o rssi atual e a mensagem recebida String data = String (millis ()) + ";" + Karakterlánc (rssi) + ";" + kapott; file.println (adatok); file.close (); }
9. lépés: Station.ino
Felvettük a szükséges könyvtárakat és definiáltunk néhány paramétert.
#include #include #include #include #include #include // Nome da rede que nos conectaremos. Criado pelo AP #define SSID "RSSI_Test" #define PASSWORD "87654321" #define HOST "192.168.0.1" // IP que foi configurarado no setup do AP #define PORT 80 // Porta do sever. Qualquer porta válida contanto que seja igual nos dois arquivos // Tempo de timeout para harkits a conexão pedida #define TIMEOUT 2000 // Largura e altura do display #define DISPLAY_WIDTH 160 #define DISPLAY_HEIGHT 128 // Configurações de coro, margem efic #define PLOT_COLOR ST77XX_GREEN #define PLOT_MARGIN 20 #define PLOT_SIZE (DISPLAY_HEIGHT - 2*PLOT_MARGIN) // Arquivo de log no SD #define FILE_PATH "/log.csv"
Meghatározzuk a kijelzőt és az SD -kártyát érintő beállításokat.
hosszú számolás = 0; // Contador de mensagens enviadaslong rssi = 0; // RSSI calculado String kapott; // Mensagem de confirmação que o AP nos envia // Pixel onde vagy gráfico começa horizontmente int currentX = PLOT_MARGIN; // Utilizado para conexão com vagy szerver WiFiClient socket; #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. Os pinos mosi, miso e sck são os nativos (23, 19 e 18 respectivamente) #define SDCARD_CS 15 // Objektív válaszadású pelo display Adafruit_ST7735 display = Adafruit_ST7735 (DISPLAY_CS, DISPLAY_DC, DISPLAY_MOSI, DISPLAY_CL hw_timer_t *timer = NULL; // faz o controle do temporizador (interruptção por tempo) // Utilizado para guardar os ultimos std:: vector rssiHistory;
Beállít
void setup () {setupDisplay (); // Inicializa o SD if (! SD.begin (SDCARD_CS)) {display.println ("Erro ao inicializar lib SD!"); } // Conecta nincs hozzáférési pont criado pelo outro ESP32 és csatlakozik a szerver beállításáhozWiFi (); connectToServer (); // Espera 3 segundos, limpa a tela e inicializa o Watchdog delay (3000); display.fillScreen (ST77XX_BLACK); display.setCursor (0, 0); setupWatchdog (); }
setupDisplay
// Incializa o display, muda a orienttação e limpa a telavoid setupDisplay () {// Inicializa o display display.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 beállítása
// Conecta ao AP void setupWiFi () {WiFi.disconnect (); WiFi.mód (WIFI_STA); WiFi.begin (SSID, JELSZÓ); display.println ("Csatlakozás" + String (SSID)); // Enquanto não estiver conectado à rede WiFi while while (WiFi.status ()! = WL_CONNECTED) {delay (500); display.print ("."); } display.println (""); display.print ("Csatlakoztatva"); display.println (SSID); }
connectToServer
void connectToServer () {display.println ("Socket connection trying"); // Espera a conexão com o server while (! Socket.connect (HOST, PORT)) {display.print ("."); késleltetés (500); } display.println (); display.println ("Csatlakoztatva!"); // Tempo máximo que o cliente deve demorar para responder // antes de dizermos que a conexão foi perdida socket.setTimeout (TIMEOUT); }
IRAM_ATTR resetModule and setupWatchdog
// função que o temporizador irá chamar, para reiniciar o ESP32void IRAM_ATTR resetModule () {ets_printf ("(watchdog) reiniciar / n"); esp_restart_noos (); // reinicia o chip} void setupWatchdog () {timer = timerBegin (0, 80, true); // timerID 0, div 80 // timer, callback, interrupção de borda timerAttachInterrupt (timer, & resetModule, true); // timer, tempo (us), repetição timerAlarmWrite (timer, 10000000, true); timerAlarmEnable (időzítő); // habilita a interrupção}
hurok
void loop () {timerWrite (időzítő, 0); // reseta o temporizador (alimenta o watchdog) checkConnection (); // checa se possui conexão com o server checkRSSI (); // verifica o rssi plot (); // mostra o gráfico de histórico de rssi sendToServer (); // envia uma mensagem com um contador para szerver readFromServer (); // espera a confirmação do server log (); // salva um log no cartão SD delay (1000); // espera um segundo}
checkConnection
void checkConnection () {// Verifica a conexão com o AP if (WiFi.status ()! = WL_CONNECTED) {display.fillScreen (ST77XX_BLACK); display.setCursor (0, 0); display.println ("WiFi leválasztva"); setupWiFi (); késleltetés (1000); } // verifica a conexão do socket if (! socket.connected ()) {display.fillScreen (ST77XX_BLACK); display.setCursor (0, 0); display.println ("Socket leválasztva"); connectToServer (); késleltetés (3000); display.fillScreen (ST77XX_BLACK); }}
checkRSSI
void checkRSSI () {// Verifica vagy RSSI rssi = WiFi. RSSI (); // Limpa vagy texto e mostra vagy RSSI nincs kijelző clearText (); display.setCursor (0, 0); display.print ("RSSI:" + Karakterlánc (rssi)); // Se a quantidade de barras do gráfico passou do limite apagamos o registro mais antigo if (rssiHistory.size () == (DISPLAY_WIDTH - 2*PLOT_MARGIN)/2) {rssiHistory.erase (rssiHistory.begin ()); } // Adiciona no final do histórico (mais recente) rssiHistory.push_back (rssi); }
cselekmény
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); // Para cada valor do histórico fazemos o cálculo do tamanho da barra do gráfico, desenhamos e avançamos para o próximo for (int i = 0; i -120? Map (rssiHistory , -120, 0, 0, PLOT_SIZE): 0; display.drawFastVLine (currentX, DISPLAY_HEIGHT - érték, érték, PLOT_COLOR); currentX += 2;}}
sendToServer
void sendToServer () {// Lásd a szervert, ha a (socket.connected ()) {// Envia um hello com um contador, mostra no display e növekménye vagy contador String send = "Hello" + String (count); display.setCursor (0, 10); display.println ("Küldés:" + küldés); socket.println (küldés); socket.print (String (rssi)); gróf ++; }}
readFromServer
void readFromServer () {// Espera até vagy szerver enviar algo ou desconectar while (socket.connected () &&! socket.available ()) {delay (100); } // Se tem algo para receber if (socket.available ()) {// Faz a leitura, remove o / n do final e mostra no display found = socket.readStringUntil ('\ n'); kapott.remove (kapott.hossz ()-1); display.println ("Fogadott:" + kapott); }}
clearText és log
void clearText () {// Limpa a área com o texto da mensagem vinda do cliente display.fillRect (0, 0, DISPLAY_WIDTH, 2*PLOT_MARGIN, ST77XX_BLACK); } void log () {// Abrimos o arquivo para escrevermos no final dele File file = SD.open (FILE_PATH, FILE_APPEND); // Se não conseguimos abrir o arquivo mostramos uma mensagem de erro if (! File) {Serial.println ("Nem sikerült megnyitni a fájlt"); Visszatérés; } // Gravamos uma linha com o tempo desde o boot, o rssi atual e a mensagem recebida String data = String (millis ()) + ";" + Karakterlánc (rssi) + ";" + kapott; file.println (adatok); file.close (); }
10. lépés: Fájlok
Töltse le a fájlokat:
ÉN NEM
Ajánlott:
HC-12 Távolsági problémák és a „FIX”: 4 lépés
HC-12 Távolsági problémák és a „FIX”: Gyenge a távolságátvitel kevesebb, mint 100 láb, vagy Csak szeretné tudni, mi az a HC-12 … GT-38 …. Olvassa el ON. Hello oldmaninSC a HC-12-ről. Úgy gondolom, hogy ez a LEGJOBB adó a kis adatokra HOSSZAN (1/2 mérföld). Nagyon könnyen kódolható és csak 4
Raspberry Pi Zero Wifi hozzáférési pont egyedi PCB antennával: 6 lépés (képekkel)
Raspberry Pi Zero Wifi hozzáférési pont egyéni NYÁK -antennával: Mit csinálunk? Ennek az oktatóanyagnak a címe sok szakkifejezést tartalmaz. Bontsuk szét. Mi az a Raspberry Pi Zero (Rπ0)? A Raspberry Pi Zero egy apró számítógép. Ez a Raspberry Pi egylapos számítógép kisebb változata
DIY állvány - Az okostelefon és a kamera állványának elkészítése antennával: 8 lépés
DIY állvány | Hogyan készítsünk okostelefonról és fényképezőgépről állványt antennával: Amikor az állványt kerestem a CookQueens videók készítéséhez, akkor láttam, hogy minden 5 lábas állvány ára nagyon magas tartományból indult ki a különböző e-kereskedelmi webhelyeken. Én is kedvezményre várok, de ezt nem kaptam meg. Ezt követően úgy döntöttem, hogy m
2. projekt: Távolsági fények: 3 lépés
2. projekt: Távolsági fények: Ez a projekt a szokásos riasztórendszer csavarja, amely egy bizonyos tartomány után villog és sípol. Ez a projekt kinyomtatja a soros monitorra, hogy a személy vagy dolog egyre közelebb kerül, és meg kell állnia. A zöld LED világít, és a
Készítsen külső merevlemezt a régi külső CD/RW lemezről: 5 lépés
Készítsen külső merevlemezt a régi külső CD/RW lemezről: Egy régi külső CD/rw meglehetősen egyszerű átalakítása hasznosabb külső merevlemezre. Kellékek: 1 külső CD/rw (lehetőleg a dobozosabb típus) 1 merevlemez (meg kell egyeznie a meghajtóház belső csatlakozójával, formázni kell/rendszerezni) 1 cm-es