সুচিপত্র:

বহিরাগত দীর্ঘ দূরত্ব অ্যান্টেনা সহ ESP32: 10 টি ধাপ
বহিরাগত দীর্ঘ দূরত্ব অ্যান্টেনা সহ ESP32: 10 টি ধাপ

ভিডিও: বহিরাগত দীর্ঘ দূরত্ব অ্যান্টেনা সহ ESP32: 10 টি ধাপ

ভিডিও: বহিরাগত দীর্ঘ দূরত্ব অ্যান্টেনা সহ ESP32: 10 টি ধাপ
ভিডিও: সহজেই মেদ কমানোর উপায় | Jamuna TV 2024, জুলাই
Anonim
Image
Image
Wrover সঙ্গে AP মাউন্ট করা
Wrover সঙ্গে AP মাউন্ট করা

আজকের বিষয় বহিরাগত অ্যান্টেনার সাথে একটি ESP32 এর সাথে দূরত্ব পরীক্ষা সম্পর্কিত। আসুন আজ দুটি মডিউল ব্যবহার করি: Espressif এবং TTGO থেকে। আসুন তাহলে এই দুটি ESP32 অ্যান্টেনার মধ্যে RSSI চেক করি, ইতিহাস থেকে একটি গ্রাফ তৈরি করি এবং একটি.csv ফাইলে মানগুলির একটি লগ লিখি।

আমাদের তখন এপি হিসাবে ESP32 Wrover, এবং TTGO এর ESP32 স্টেশন হিসাবে আছে। আমি একটি অ্যান্টেনা ব্যবহার করেছি যা আমি একটু বড় TP-Link এবং অন্য একটি রাউটার থেকে নিয়েছি যা 9dbm অ্যান্টেনা নামে পরিচিত। আমি দুটোর মধ্যে কোন পার্থক্য লক্ষ্য করিনি।

অবশেষে, দুটি মাইক্রোকন্ট্রোলার সকেটের মাধ্যমে সংযুক্ত হয় এবং, প্রতিটি ডেটা প্যাকেট পাঠানোর সাথে, আমরা একটি ডিসপ্লেতে বারগুলির সাথে একটি গ্রাফ মুদ্রণ করি যা dbm এর অনুপাত নির্দেশ করে।

ধাপ 1: Wrover দিয়ে AP মাউন্ট করা

ধাপ 2: টিটিজিও সহ স্টেশনের সমাবেশ

টিটিজিও সহ স্টেশনের সমাবেশ
টিটিজিও সহ স্টেশনের সমাবেশ

ধাপ 3: ফলাফল

ফলাফল
ফলাফল
ফলাফল
ফলাফল
ফলাফল
ফলাফল

2x বাহ্যিক অ্যান্টেনার সাথে সর্বোচ্চ দূরত্ব: 315 মিটার

বাহ্যিক এবং অভ্যন্তরীণ অ্যান্টেনার সাথে সর্বোচ্চ দূরত্ব: 157 মিটার

ধাপ 4: LOG. CSV আর্কাইভ করুন

LOG. CSV আর্কাইভ করুন
LOG. CSV আর্কাইভ করুন
LOG. CSV আর্কাইভ করুন
LOG. CSV আর্কাইভ করুন

আমি একটি SD কার্ডে ডেটা রেকর্ড করেছি, মিলিস, ডিবিএম এবং প্যাকেজ স্ট্রিং এর ডেটা সহ।

পদক্ষেপ 5: অ্যাডাফ্রুট জিএফএক্স লাইব্রেরি

অ্যাডাফ্রুট জিএফএক্স লাইব্রেরি
অ্যাডাফ্রুট জিএফএক্স লাইব্রেরি

Arduino IDE- এ, Sketch-> Include Library-> Manage Library- এ যান …

অ্যাডাফ্রুট জিএফএক্স লাইব্রেরি ইনস্টল করুন

ধাপ 6: Adafruit ST7735 লাইব্রেরি

Adafruit ST7735 লাইব্রেরি
Adafruit ST7735 লাইব্রেরি

Arduino IDE- এ, Sketch-> Include Library-> Manage Library- এ যান …

Adafruit ST7735 ইনস্টল করুন

ধাপ 7: কার্ডগুলি কনফিগার করা

কার্ড কনফিগার করা
কার্ড কনফিগার করা
কার্ড কনফিগার করা
কার্ড কনফিগার করা

পার্থক্যের জন্য আমাদের সাথে থাকুন:

ধাপ 8: AP.ino

আমরা প্রয়োজনীয় লাইব্রেরি অন্তর্ভুক্ত করেছি এবং কিছু পরামিতি সংজ্ঞায়িত করেছি।

#অন্তর্ভুক্ত #অন্তর্ভুক্ত #অন্তর্ভুক্ত #অন্তর্ভুক্ত #অন্তর্ভুক্ত #অন্তর্ভুক্ত #অন্তর্ভুক্ত // রিডে কিউ ইএসপি ক্রায়ার। কোন স্টেশন ডেভ সের আইগুয়াল #ডিএসফাইন SSID "RSSI_Test" #ডিফাইন পাসওয়ার্ড "87654321" // টেম্পো ডি টাইমআউট পেরার এ কনসেক্সো পেডিডা #ডিফাইন টাইমআউট 2000 // লার্গুরা ই অল্টুরা ডো ডিসপ্লে #ডিফাইন ডিসপ্লে_উইডথ 160 #ডিফাইন ডিসপ্লে_ 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 "log/pg"

আমরা অন্যান্য ভেরিয়েবলের মধ্যে পিনগুলি সংজ্ঞায়িত করি

// 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) #SDCARD_CS 15 সংজ্ঞায়িত করুন // Pixel onde o gráfico começa horizontalmente int currentX = PLOT_MARGIN; // Objeto responsável pelo display Adafruit_ST7735 display = Adafruit_ST7735 (DISPLAY_CS, DISPLAY_DC, DISPLAY_MOSI, DISPLAY_CLK, DISPLAY_RST); // Criamos um server (qualquer porta válida serve contanto que o clientele use a mesma porta) WiFiServer server (80); // Variável para armazenar o cliente (no caso o ESP32 em modo station) conectado WiFiClient client; // স্ট্রিং que recebemos do cliente স্ট্রিং রিসিভ; // RSSI enviado pelo cliente para este ESP32 long rssi = 0; // Faz o controle do temporizador (interrupção por tempo) hw_timer_t *timer = NULL; // Utilizado para guardar os ultimos std:: vector rssiHistory;

সেটআপ

অকার্যকর সেটআপ () {Serial.begin (115200); setupDisplay (); // Inicializa o SD if (! SD.begin (SDCARD_CS)) {display.println ("Erro ao inicializar lib SD!"); } // Cria a rede WiFi, inicializa o server e espera o cliente conectar setupWiFi (); server.begin (); waitForClient (); // Espera 3 segundos, limpa a tela e inicializa o Watchdog delay (3000); display.fillScreen (ST77XX_BLACK); display.setCursor (0, 0); setupWatchdog (); }

ওয়াইফাই সেটআপ করুন

// Cria um Access Point e configura o 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" + স্ট্রিং (SSID) + "তৈরি!"); }

সেটআপ ডিসপ্লে

// Incializa o display, muda a orientaçã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

অকার্যকর waitForClient () {display.println ("ক্লায়েন্টের জন্য অপেক্ষা করা"); // Aguarda o cliente conectar while (! (Client = server.available ())) {display.print ("।"); বিলম্ব (500); } display.println ("ক্লায়েন্ট সংযুক্ত"); // Tempo máximo que o cliente deve demorar para responder // antes de dizermos que a conexão foi perdida client.setTimeout (TIMEOUT); }

IRAM_ATTR রিসেট মডিউল এবং সেটআপ ওয়াচডগ

// 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); // টাইমার, টেম্পো (আমাদের), repetição timerAlarmWrite (টাইমার, 10000000, সত্য); timerAlarmEnable (টাইমার); // habilita a interrupção}

লুপ

অকার্যকর লুপ () {টাইমারওয়াইট (টাইমার, 0); // reseta o temporizador (alimenta o watchdog) checkConnection (); // checa se possui conexão com o cliente readFromClient (); // lê os dados do clientend sendToClient (); // envia confirmação para o clienteot plot (); // mostra o gráfico de histórico de rssi log (); // salva um log no cartão SD}

চেক সংযোগ

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 ("ক্লায়েন্ট সংযোগ বিচ্ছিন্ন"); waitForClient (); }}

ReadFromClient

অকার্যকর 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 receive.remove (receive.length ()-1); // অপসারণ o / n চূড়ান্ত rssi = client.parseInt (); // Lê o rssi que o cliente enviou clearText (); // Limpa o texto display.setCursor (0, 0); // সরান হে কার্সার ডু টেক্সটো প্যারা ও কামেনো ডো ডিসপ্লে ডিসপ্লে। প্রিন্টলন ("RSSI:" + স্ট্রিং (rssi)); // Mostra o RSSI no display display.println ("প্রাপ্ত:" + প্রাপ্ত); // Mostra a mensagem recebida do ग्राहक.begin ()); } // Adiciona no final do histórico (mais recente) rssiHistory.push_back (rssi); }}

পাঠান ক্লায়েন্ট

void sendToClient () {// Se o cliente estiver conectado enviamos de volta a mensagem com um OK if (client.connected ()) {স্ট্রিং পাঠানো = প্রাপ্ত + "ওকে"; 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); // 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 - মান, মান, PLOT_COLOR); currentX += 2;}}

clearText এবং 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 ("Failed to open file"); প্রত্যাবর্তন; } // Gravamos uma linha com o tempo desde o boot, o rssi atual e a mensagem recebida String data = String (millis ()) + ";" + স্ট্রিং (rssi) + ";" + প্রাপ্ত; file.println (ডেটা); file.close (); }

ধাপ 9: Station.ino

আমরা প্রয়োজনীয় লাইব্রেরি অন্তর্ভুক্ত করেছি এবং কিছু পরামিতি সংজ্ঞায়িত করেছি।

#অন্তর্ভুক্ত #অন্তর্ভুক্ত #অন্তর্ভুক্ত #অন্তর্ভুক্ত #অন্তর্ভুক্ত #অন্তর্ভুক্ত #অন্তর্ভুক্ত #নাম ক্রিয়েডো পেলো AP #SSD "RSSI_Test" #পাসওয়ার্ড নির্ধারণ করুন "87654321" #define HOST "192.168.0.1" // IP que foi configurado no setup do AP #define PORT 80 // Porta do sever। Qualquer Porta válida contanto কী seja igual টি Dois arquivos // টেমপো ডি সময়সীমার পাড়া considerar A Conexao pedida # define কাছে TIMEOUT 2000 // Largura ই Altura না ডিসপ্লে # define DISPLAY_WIDTH 160 # define DISPLAY_HEIGHT 128 // Configurações ডি করি, margem ই tamanho gráfico না #ডিফাইন PLOT_COLOR ST77XX_GREEN #ডিফাইন PLOT_MARGIN 20 #ডিফাইন PLOT_SIZE (DISPLAY_HEIGHT - 2*PLOT_MARGIN) // Arquivo de log no SD #define FILE_PATH "/log.csv"

আমরা ডিসপ্লে এবং এসডি কার্ড যুক্ত সেটিংস সংজ্ঞায়িত করি।

দীর্ঘ গণনা = 0; // Contador de mensagens enviadaslong rssi = 0; // RSSI ক্যালকুলেডো স্ট্রিং পেয়েছে; // Mensagem de confirmação que o AP nos envia // Pixel onde o gráfico começa horizontalmente int currentX = PLOT_MARGIN; // ইউটিলিজাডো প্যারা কনেক্সো কম সার্ভার ওয়াইফাই ক্লায়েন্ট সকেট; #DISPLAY_DC 12 // A0 #DISPLAY_CS 13 // CS #define DISPLAY_MOSI 14 // SDA #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 // Objeto responsável pelo display Adafruit_ST7735 display = Adafruit_ST7735 (DISPLAY_CS, DISPLAY_DC, DISPLAY_MOSPLAY_DOSPLAY_MOSPLAY) hw_timer_t *টাইমার = শূন্য; // faz o controle do temporizador (interrupção por tempo) // Utilizado para guardar os ultimos std:: vector rssiHistory;

সেটআপ

অকার্যকর সেটআপ () {setupDisplay (); // Inicializa o SD if (! SD.begin (SDCARD_CS)) {display.println ("Erro ao inicializar lib SD!"); } // সংযোগের কোন অ্যাক্সেস পয়েন্ট নেই connectToServer (); // Espera 3 segundos, limpa a tela e inicializa o Watchdog delay (3000); display.fillScreen (ST77XX_BLACK); display.setCursor (0, 0); setupWatchdog (); }

সেটআপ প্রদর্শন

// Incializa o display, muda a orientaçã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); }

সেটআপ ওয়াইফাই

// Conecta ao AP void setupWiFi () {WiFi.disconnect (); WiFi.mode (WIFI_STA); WiFi.begin (SSID, PASSWORD); display.println ("কানেক্ট করা হচ্ছে" + স্ট্রিং (SSID)); // Enquanto não estiver conectado Wi rede WiFi while (WiFi.status ()! = WL_CONNECTED) {বিলম্ব (500); display.print ("।"); } display.println (""); display.print ("সাথে সংযুক্ত"); display.println (SSID); }

সংযোগ সার্ভার

অকার্যকর connectToServer () {display.println ("সকেট সংযোগ চেষ্টা করে"); // Espera a conexão com o server while (! Socket.connect (HOST, PORT)) {display.print ("।"); বিলম্ব (500); } display.println (); display.println ("সংযুক্ত!"); // Tempo máximo que o cliente deve demorar para responder // antes de dizermos que a conexão foi perdida socket.setTimeout (TIMEOUT); }

IRAM_ATTR রিসেট মডিউল এবং সেটআপ ওয়াচডগ

// 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); // টাইমার, টেম্পো (আমাদের), repetição timerAlarmWrite (টাইমার, 10000000, সত্য); timerAlarmEnable (টাইমার); // habilita a interrupção}

লুপ

অকার্যকর লুপ () {টাইমারওয়াইট (টাইমার, 0); // reseta o temporizador (alimenta o watchdog) checkConnection (); // checa se possui conexão com o সার্ভার checkRSSI (); // verifica o rssi চক্রান্ত (); // mostra o gráfico de histórico de rssi sendToServer (); // envia uma mensagem com um contador para o server readFromServer (); // espera a confirmação do server log (); // salva um log no cartão SD বিলম্ব (1000); // espera um segundo}

চেক সংযোগ

void checkConnection () {// Verifica a conexão com o AP if (WiFi.status ()! = WL_CONNECTED) {display.fillScreen (ST77XX_BLACK); display.setCursor (0, 0); display.println ("ওয়াইফাই সংযোগ বিচ্ছিন্ন"); 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 no display clearText (); display.setCursor (0, 0); display.print ("RSSI:" + স্ট্রিং (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); }

পটভূমি

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 - মান, মান, PLOT_COLOR); currentX += 2;}}

পাঠান সার্ভার

void sendToServer () {// Se estiver conectado com o server if (socket.connected ()) {// Envia um hello com um contador, mostra no display e incrementa o contador String Send = "Hello" + String (count); display.setCursor (0, 10); display.println ("পাঠানো:" + পাঠানো); socket.println (পাঠানো); socket.print (স্ট্রিং (rssi)); গণনা ++; }}

ReadFromServer

অকার্যকর readFromServer () {// Espera até o server 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 receive = socket.readStringUntil ('\ n'); receive.remove (receive.length ()-1); display.println ("প্রাপ্ত:" + প্রাপ্ত); }}

clearText এবং লগ

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 ("ফাইল খুলতে ব্যর্থ"); প্রত্যাবর্তন; } // Gravamos uma linha com o tempo desde o boot, o rssi atual e a mensagem recebida String data = String (millis ()) + ";" + স্ট্রিং (rssi) + ";" + প্রাপ্ত; file.println (ডেটা); file.close (); }

ধাপ 10: ফাইল

ফাইল ডাউনলোড করুন:

পিডিএফ

আইএনও

প্রস্তাবিত: