Оглавление:
- Шаг 1. Установка точки доступа с помощью Wrover
- Шаг 2: Сборка СТАНЦИИ с TTGO
- Шаг 3: РЕЗУЛЬТАТ
- Шаг 4. Заархивируйте LOG.CSV
- Шаг 5: библиотека Adafruit GFX
- Шаг 6: библиотека Adafruit ST7735
- Шаг 7: Настройка карт
- Шаг 8: AP.ino
- Шаг 9: Station.ino
- Шаг 10: файлы
Видео: ESP32 с внешней антенной для дальней связи: 10 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:52
Сегодняшняя тема касается теста на расстояние с ESP32 с внешней антенной. Воспользуемся сегодня двумя модулями: от Espressif и TTGO. Затем давайте проверим RSSI между этими двумя антеннами ESP32, сгенерируем график из истории и запишем журнал значений в файл.csv.
Затем у нас есть ESP32 Wrover в качестве AP и ESP32 TTGO в качестве станции. Я использовал антенну, которую взял от TP-Link немного большего размера, и другой маршрутизатор, известный как антенна 9 дБм. Я не заметил никакой разницы между ними.
Наконец, два микроконтроллера подключаются через сокет, и при каждой отправке пакетов данных мы печатаем на дисплее график с полосами, указывающими соотношение dbm.
Шаг 1. Установка точки доступа с помощью Wrover
Шаг 2: Сборка СТАНЦИИ с TTGO
Шаг 3: РЕЗУЛЬТАТ
Максимальное расстояние с 2х внешними антеннами: 315 метров
Максимальное расстояние с внешней и внутренней антенной: 157 метров
Шаг 4. Заархивируйте LOG. CSV
Я записал данные на SD-карту с данными в миллисекундах, дБм и строкой пакета.
Шаг 5: библиотека Adafruit GFX
В среде Arduino IDE перейдите в Sketch-> Include Library-> Manage Libraries…
Установить библиотеку Adafruit GFX
Шаг 6: библиотека Adafruit ST7735
В среде Arduino IDE перейдите в Sketch-> Include Library-> Manage Libraries…
Установите Adafruit ST7735
Шаг 7: Настройка карт
Следите за новостями:
Шаг 8: AP.ino
Мы включили необходимые библиотеки и определили некоторые параметры.
#include #include #include #include #include #include // Перезапустить запрос ESP. No Station deve ser igual #define SSID "RSSI_Test" #define PASSWORD "87654321" // Тайм-аут для определения времени ожидания #define TIMEOUT 2000 // Отображение и изменение параметров #define DISPLAY_WIDTH 160 #define DISPLAY_çEIGHT 128 // Config. 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_PvATH "/log.
Мы определяем контакты, среди других переменных
// Pinos отображает # 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 и 18 соответственно) #define SDCARD_CS 15 // Пиксель графического изображения по горизонтали int currentX = PLOT_MARGIN; // Задайте ответ на экран дисплея Adafruit_ST7735 display = Adafruit_ST7735 (DISPLAY_CS, DISPLAY_DC, DISPLAY_MOSI, DISPLAY_CLK, DISPLAY_RST); // Criamos um server (квалификационный порт может служить для того, чтобы клиент использовал порт обмена сообщениями) WiFiServer server (80); // Вариант для вооружения или клиента (без использования ESP32 и модной станции) conectado WiFiClient client; // String que Recebemos do cliente Строка получена; // RSSI enviado pelo cliente para este ESP32 long rssi = 0; // Фаз или контроль над темпом (прерывание по темпу) hw_timer_t * timer = NULL; // Использование для защиты от ультиматумов std:: vector rssiHistory;
Настраивать
void setup () {Serial.begin (115200); setupDisplay (); // Инициализация SD if (! SD.begin (SDCARD_CS)) {display.println ("Erro ao inicializar lib SD!"); } // Создание нового Wi-Fi, инициализация сервера и клиентского подключения 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 (); }
Настроить WiFi
// Точка доступа Cria и конфигурация IPvoid setupWiFi () {display.println ("Создание softAP" + String (SSID)); WiFi.disconnect (); WiFi.mode (WIFI_AP); WiFi.softAPConfig (IP-адрес (192, 168, 0, 1), IP-адрес (192, 168, 0, 1), IP-адрес (255, 255, 255, 0)); WiFi.softAP (SSID, ПАРОЛЬ); display.println («softAP» + строка (SSID) + «created!»); }
Дисплей настройки
// Начинаем отображение, выбираем ориентацию и ограничиваем телавид setupDisplay () {// Начинаем отображение display.initR (INITR_BLACKTAB); // Вращение или управление большинством display.setRotation (3); // Добавить изображение к экрану display.fillScreen (ST77XX_BLACK); }
waitForClient
void waitForClient () {display.println («Ожидание клиента»); // Обращение к клиенту с клиентом while (! (Client = server.available ())) {display.print ("."); задержка (500); } display.println («Клиент подключен»); // Максимальное время, когда клиент разрабатывает демонстрацию для респондента // Предложения, которые нужно выполнить, чтобы подключиться к клиенту.setTimeout (TIMEOUT); }
IRAM_ATTR resetModule и setupWatchdog
// função que o temporizador irá chamar, para reiciar o ESP32void IRAM_ATTR resetModule () {ets_printf ("(watchdog) reiniciar / n"); esp_restart_noos (); // восстановление чипа} void setupWatchdog () {timer = timerBegin (0, 80, true); // timerID 0, div 80 // таймер, обратный вызов, прерывание вызова timerAttachInterrupt (timer, & resetModule, true); // таймер, темп (нас), повторение timerAlarmWrite (timer, 10000000, true); timerAlarmEnable (таймер); // habilita a interrupção}
Петля
void loop () {timerWrite (таймер, 0); // сбросить временный таймер (питание сторожевого таймера) checkConnection (); // проверка возможности соединения с клиентом readFromClient (); // если клиенты делают клиент sendToClient (); // envia confirmmação para o cliente plot (); // история графического образа rssi log (); // Salva um log no cartão SD}
Проверьте подключение
void checkConnection () {// Если клиент не может подключиться к сети if (! client.connected ()) {// Устанавливать связь с клиентом display.fillScreen (ST77XX_BLACK); display.println («Клиент отключен»); waitForClient (); }}
readFromClient
void readFromClient () {// Используйте алгоритм клиента enviar или desconectar while (client.connected () &&! client.available ()) {delay (100); } // Если вы хотите узнать, как получить результат, это может быть алгоритм для получателя if (client.connected ()) {Received = client.readStringUntil ('\ n'); // Текстовое сообщение, полученное клиентом enviou. // Удаляем o / n do final rssi = client.parseInt (); // Lê o rssi que o cliente enviou clearText (); // Ограничить текст display.setCursor (0, 0); // Переместите курсор, чтобы перейти к тексту, чтобы перейти к отображению display.println ("RSSI:" + String (rssi)); // Большинство сообщений о RSSI no display display.println ("Получено:" + получено); // Большинство сообщений для клиентов // Se a quantidade de barras do gráfico passou do limit apagamos o registro mais antigo if (rssiHistory.size () == (DISPLAY_WIDTH - 2 * PLOT_MARGIN) / 2) {rssiHistory.erase (rssiHistory.erase (rssiHistory.erase (rssiHistory.erase).начинать()); } // Окончательный вариант истории (последний раз) rssiHistory.push_back (rssi); }}
sendToClient
void sendToClient () {// Если клиент устанавливает соединение с сетью обмена сообщениями, OK if (client.connected ()) {String sent = Received + "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); // 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 и журнал
void clearText () {// Ограничить область сообщения или сообщения для клиента display.fillRect (0, 0, DISPLAY_WIDTH, 2 * PLOT_MARGIN, ST77XX_BLACK); } void log () {// Нет окончательного удаления File file = SD.open (FILE_PATH, FILE_APPEND); // Не удалось сохранить сообщение об ошибке if (! File) {Serial.println ("Не удалось открыть файл"); возвращение; } // Gravamos uma linha com o tempo desde o boot, orssi atual e a mensagem Recebida String data = String (millis ()) + ";"; + Строка (rssi) + ";" + получил; file.println (данные); file.close (); }
Шаг 9: Station.ino
Мы включили необходимые библиотеки и определили некоторые параметры.
#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, который не конфигурируется для AP #define PORT 80 // Порт для сервера. Qualquer porta válida contanto que seja igual nos dois arquivos // Tempo de timeout для рассмотрения conexão pedida #define TIMEOUT 2000 // Отображение и высота отображения #define DISPLAY_WIDTH 160 #define DISPLAY_HEIGHT 128 // Конфигурация решетки и границы, #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"
Мы определяем настройки, которые связаны с дисплеем и SD-картой.
длинный счет = 0; // Contador de mensagens enviadaslong rssi = 0; // RSSI Calculado Строка получена; // Подтверждение значений AP nos envia // Pixel onde or gáfico começa horizontalmente int currentX = PLOT_MARGIN; // Использование для подключения к серверу 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 // Objeto Response Pelo display Adafruit_ST7735 display = Adafruit_ST7735 (DISPLAY_CS, DISPLAY_DC, DISPLAY_MOSI, DISPLAY_CLAY_CLAY_CLAY_CL); hw_timer_t * timer = NULL; // faz o control do temporizador (interrupção por tempo) // Использование для защиты от ультимативных действий std:: vector rssiHistory;
Настраивать
void setup () {setupDisplay (); // Инициализация SD if (! SD.begin (SDCARD_CS)) {display.println ("Erro ao inicializar lib SD!"); } // Не подключать точку доступа, чтобы удалить ESP32 и подключиться к серверу setupWiFi (); connectToServer (); // Espera 3 segundos, limpa a tela e inicializa o Watchdog delay (3000); display.fillScreen (ST77XX_BLACK); display.setCursor (0, 0); setupWatchdog (); }
setupDisplay
// Начинаем отображение, выбираем ориентацию и ограничиваем телавид setupDisplay () {// Начинаем отображение display.initR (INITR_BLACKTAB); // Вращение или управление большинством display.setRotation (1); // Сделать телеграмму display.fillScreen (ST77XX_BLACK); display.setTextColor (ST77XX_WHITE); }
настройкаWiFi
// Conecta ao AP void setupWiFi () {WiFi.disconnect (); WiFi.mode (WIFI_STA); WiFi.begin (SSID, ПАРОЛЬ); display.println («Подключение к» + строка (SSID)); // Нет необходимости подключать Wi-Fi while (WiFi.status ()! = WL_CONNECTED) {delay (500); display.print ("."); } display.println (""); display.print («Подключено к»); display.println (SSID); }
connectToServer
void connectToServer () {display.println ("Попытка подключения к сокету"); // Используйте сервер conexão com o while (! Socket.connect (HOST, PORT)) {display.print ("."); задержка (500); } display.println (); display.println («Подключено!»); // Максимальное время, когда клиент разрабатывает демонстрацию для респондента // аннулирует работу, которая соединяется с сокетом.setTimeout (TIMEOUT); }
IRAM_ATTR resetModule и setupWatchdog
// função que o temporizador irá chamar, para reiciar o ESP32void IRAM_ATTR resetModule () {ets_printf ("(watchdog) reiniciar / n"); esp_restart_noos (); // восстановление чипа} void setupWatchdog () {timer = timerBegin (0, 80, true); // timerID 0, div 80 // таймер, обратный вызов, прерывание вызова timerAttachInterrupt (timer, & resetModule, true); // таймер, темп (нас), повторение timerAlarmWrite (timer, 10000000, true); timerAlarmEnable (таймер); // habilita a interrupção}
петля
void loop () {timerWrite (таймер, 0); // сбросить временный таймер (питание сторожевого таймера) checkConnection (); // проверка возможности подключения к серверу checkRSSI (); // проверка или построение графика (); // основной графический файл rssi sendToServer (); // envia uma mensagem com um contador para o server readFromServer (); // Подтверждение выполнения журнала сервера (); // сохранить журнал без карты SD delay (1000); // espera um segundo}
Проверьте подключение
void checkConnection () {// Проверка соединения с AP if (WiFi.status ()! = WL_CONNECTED) {display.fillScreen (ST77XX_BLACK); display.setCursor (0, 0); display.println («WiFi отключен»); setupWiFi (); задержка (1000); } // проверка соединения с сокетом if (! socket.connected ()) {display.fillScreen (ST77XX_BLACK); display.setCursor (0, 0); display.println («Сокет отключен»); connectToServer (); задержка (3000); display.fillScreen (ST77XX_BLACK); }}
checkRSSI
void checkRSSI () {// Проверка RSSI rssi = WiFi. RSSI (); // Ограничение текста и сообщения RSSI no display clearText (); display.setCursor (0, 0); display.print ("RSSI:" + строка (rssi)); // Задайте количественное значение для графического прохода, чтобы ограничить доступ к записи или зарегистрировать антиго if (rssiHistory.size () == (DISPLAY_WIDTH - 2 * PLOT_MARGIN) / 2) {rssiHistory.erase (rssiHistory.begin ()); } // Окончательный вариант истории (последний раз) 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;}}
sendToServer
void sendToServer () {// Установить соединение с другим сервером if (socket.connected ()) {// Envia um hello com um contador, больше нет отображения и инкремента или contador String send = "Hello" + String (count); display.setCursor (0, 10); display.println ("Отправка:" + отправка); socket.println (отправка); socket.print (строка (rssi)); count ++; }}
readFromServer
void readFromServer () {// Используйте алгоритм или удаление сервера, а (socket.connected () &&! socket.available ()) {delay (100); } // Алгоритм набора для получателя if (socket.available ()) {// Выбрать название, удалить или / n сделать окончательный вывод, не получено отображение = socket.readStringUntil ('\ n'); Received.remove (Received.length () - 1); display.println ("Получено:" + получено); }}
clearText и журнал
void clearText () {// Ограничить область сообщения или сообщения для клиента display.fillRect (0, 0, DISPLAY_WIDTH, 2 * PLOT_MARGIN, ST77XX_BLACK); } void log () {// Без окончательного удаления File file = SD.open (FILE_PATH, FILE_APPEND); // Не удалось сохранить сообщение об ошибке if (! File) {Serial.println ("Не удалось открыть файл"); возвращение; } // Gravamos uma linha com o tempo desde o boot, orssi atual e a mensagem Recebida String data = String (millis ()) + ";"; + Строка (rssi) + ";" + получил; file.println (данные); file.close (); }
Шаг 10: файлы
Загрузите файлы:
Я НЕТ
Рекомендуемые:
ЖК-дисплей для обмена сообщениями, управляемый через Bluetooth -- ЖК-дисплей 16x2 -- Hc05 -- Простой -- Доска объявлений о беспроводной связи: 8 шагов
ЖК-дисплей для обмена сообщениями, управляемый через Bluetooth || ЖК-дисплей 16x2 || Hc05 || Простой || Доска объявлений о беспроводных технологиях: …………………………. ПОДПИСАТЬСЯ на мой канал YouTube, чтобы увидеть больше видео …… ………………………………… Доска объявлений используется для информирования людей новой информацией или Если вы хотите отправить сообщение в комнату или в половину
Точка доступа Raspberry Pi Zero Wifi с настраиваемой антенной на печатной плате: 6 шагов (с изображениями)
Точка доступа Raspberry Pi Zero Wifi с настраиваемой антенной на печатной плате: что мы делаем? В названии этого руководства содержится множество технических терминов. Давайте разберемся с этим. Что такое Raspberry Pi Zero (Rπ0)? Raspberry Pi Zero - это крошечный компьютер. Это уменьшенная версия одноплатного компьютера Raspberry Pi
Деревянная стойка для связи 19 дюймов высотой 9U: 5 шагов
Стойка для связи 19 дюймов высотой 9U из дерева: мне нужна была небольшая «открытая рама»; 19 " Коммуникационная стойка для моего дома, но я не мог найти ничего подходящего размера и по разумной цене, поэтому я решил сделать ее сам. Открытые стороны облегчают ввод и вывод проводов, а также упрощают
Maverick - Автомобиль для двунаправленной связи с дистанционным управлением: 17 шагов (с изображениями)
Maverick - Автомобиль для двунаправленной связи с дистанционным управлением: Привет всем, я Разван и добро пожаловать в мой “ Maverick ” Мне всегда нравились вещи с дистанционным управлением, но у меня никогда не было радиоуправляемой машины. Поэтому я решил построить такую, которая может немного больше, чем просто передвигаться. Для этого проекта мы будем
Увеличение эффективного расстояния на передатчике дистанционного триггера вспышки «ebay» с антенной: 6 шагов
Увеличьте эффективное расстояние на передатчике дистанционного триггера вспышки «ebay» с антенной. Любители фотоаппаратов могут приобрести недорогие версии дистанционных триггеров для внешних вспышек, управляющих вспышками типа «горячий башмак» или «студийного» типа. Эти триггеры страдают низкой мощностью передатчика и, следовательно, малым эффективным расстоянием управления. Этот мо