Подключение ESP-01 с использование адаптера сигналов и питания
- Войдите на сайт для отправки комментариев
Ср, 16/09/2020 - 13:34
Решил попробовать Wi-Fi модуль ESP-01 с адаптером сигналов и питания.
Вот такой адаптер:
А вот всё в сборе:
Это с другой стороны:
Распиновка контактов адаптера (слева направо):
GND
VCC
TX
RX
Пользовался ли кто-нибудь таким адаптером? Я подключил его к Arduino и залил скетч:
#include <SoftwareSerial.h>
// создаём объект для работы с программным Serial
// и передаём ему пины TX и RX
SoftwareSerial mySerial(9, 8);
// serial-порт к которому подключён Wi-Fi модуль
#define WIFI_SERIAL mySerial
void setup()
{
// открываем последовательный порт для мониторинга действий в программе
// и передаём скорость 9600 бод
Serial.begin(9600);
while (!Serial) {
// ждём, пока не откроется монитор последовательного порта
// для того, чтобы отследить все события в программе
}
Serial.print("Serial init OK\r\n");
// открываем Serial-соединение с Wi-Fi модулем на скорости 115200 бод
WIFI_SERIAL.begin(115200);
}
void loop()
{
// если приходят данные из Wi-Fi модуля - отправим их в порт компьютера
if (WIFI_SERIAL.available()) {
Serial.write(WIFI_SERIAL.read());
}
// если приходят данные из компьютера - отправим их в Wi-Fi модуль
if (Serial.available()) {
WIFI_SERIAL.write(Serial.read());
}
}
Скетч честно скопировал с wiki.amperka, только поменял пины (накосячил при пайке шлейфа).
Но на все мои команды отвечает только ERROR:
Serial init OK
at
ERROR
AT+UART_DEF=9600,8,1,0,0
ERROR
at+test
ERROR
В чём может быть проблема? Никто не подскажет?
Заранее благодарен.
Э-э, проблемка, не все изображения вставились. Не пойму в чём дело. Надеюсь общего вида достаточно. Если нет, то попробую повторить...
попробуйте в Мониторе порта выбрать другое окончание строки - если там CR + LF - поставьте только CR или наоборот
Отлично, помогло!
Даже получил список доступных Wi-Fi сетей:
Получился огромный перерыв, скажем так, по семейным обстоятельствам.
Вернулся к разработке Arduino с ESP-01.
Вот чуть-чуть доработанный программный модуль:
#include <Wire.h> // Бибилиотека для I2C (SDA - A4, SCL - A5)* #include <DS1307RTC.h> // Библиотека для модуля часов* #include <I2C_LCD_RUS_NoCyrB.h> // Библиотека для LCD индикатора #include <SoftwareSerial.h> // Библиотека програмной реализации обмена по UART-протоколу SoftwareSerial ESP01(9, 8); // 8 - RX, 9 - TX, соответствует обозначениям на адаптере питания и сигналов модуля ESP-01 I2C_LCD_RUS_NoCyrB lcd(0x27, 16, 2); // Подключаем LCD (адрес, 16 столбцов, 2 строки) unsigned long Old_Mil; // Предыдущее значение милисекунд void setup() { Serial.begin(9600); // Подключаем последовательный порт со скоростью 9600 lcd.begin(); // Инициализация ЖК дисплея Serial.println("Serial init OK"); // Начинаем инициализацию модуля ESP-01 ESP01.begin(9600); // Подключаем модуль ESP-01 на скорости 9600 ESP01.write("AT+CWMODE_DEF=3"); // Переводим модуль в смешанный режим (точка доступа/клиент) ESP01.write("AT+CWJAP=\"**********\",\"**********\""); // Подключаемся к Wi-Fi сети (сеть "M0ja_semja", пароль "27051962") // Вывод сообщения на LCD монитор lcd.clear(); lcd.print("МОДУЛЬ ESP-01"); Old_Mil=millis; // Текущее значение миллисекунд } void loop() { if (ESP01.available()) // Если приходят данные из Wi-Fi модуля - отправим их в порт компьютера { Serial.write(ESP01.read()); // Отправляем их в порт компьютера } if (Serial.available()) // Если приходят данные из компьютера { ESP01.write(Serial.read()); // Отправяем их в Wi-Fi модуль } if (millis()-Old_Mil>=60000) // Один раз в минуту { Old_Mil=millis; // Новое значение миллисекунд // ESP01.write("AT+CWLAP"); // Получаем список доступных Wi-Fi сетей ESP01.println("AT+CWLAP"); // Получаем список доступных Wi-Fi сетей } }Странно, что введя руками AT+CWLAP, получаю честный список доступных Wi-Fi сетей:
Немного изменил отправку команд в Wi-Fi модуль:
#include <Wire.h> // Бибилиотека для I2C (SDA - A4, SCL - A5)* #include <DS1307RTC.h> // Библиотека для модуля часов* #include <I2C_LCD_RUS_NoCyrB.h> // Библиотека для LCD индикатора #include <SoftwareSerial.h> // Библиотека програмной реализации обмена по UART-протоколу SoftwareSerial ESP01(9, 8); // 8 - RX, 9 - TX, соответствует обозначениям на адаптере питания и сигналов модуля ESP-01 I2C_LCD_RUS_NoCyrB lcd(0x27, 16, 2); // Подключаем LCD (адрес, 16 столбцов, 2 строки) unsigned long Old_MilS; // Предыдущее значение милисекунд для вывода секунд int Cnt_Sec=0; bool RZR_1=false; bool RZR_2=false; void setup() { Serial.begin(9600); // Подключаем последовательный порт со скоростью 9600 lcd.begin(); // Инициализация ЖК дисплея Serial.println("Serial init OK"); // Начинаем инициализацию модуля ESP-01 ESP01.begin(9600); // Подключаем модуль ESP-01 на скорости 9600 ESP01.write("ATE=0"); // Включаем/выключаем эхосигнал ESP01.write("AT+SLEEP=0"); // Выключаем режим сна ESP01.write("AT+CWMODE_DEF=3"); // Переводим модуль в смешанный режим (точка доступа/клиент) ESP01.write("AT+CWJAP=\"**********\",\"**********\""); // Подключаемся к Wi-Fi сети (сеть "M0ja_semja", пароль "27051962") // Вывод сообщения на LCD монитор lcd.clear(); lcd.print("МОДУЛЬ ESP-01"); Old_MilS=millis(); // Текущее значение миллисекунд для вывода секунд } void loop() { if (ESP01.available()) // Если приходят данные из Wi-Fi модуля - отправим их в порт компьютера { Serial.write(ESP01.read()); // Отправляем их в порт компьютера } if (Serial.available()) // Если приходят данные из компьютера { ESP01.write(Serial.read()); // Отправяем их в Wi-Fi модуль } if (millis()-Old_MilS>=1000) // Один раз в секунду { Old_MilS=millis(); // Новое значение миллисекунд для вывода секунд Cnt_Sec++; if (Cnt_Sec>=60) { Cnt_Sec=0; lcd.setCursor(0,1); lcd.print(" "); RZR_1=true; RZR_2=true; } lcd.setCursor(0,1); lcd.print(Cnt_Sec); } if (Cnt_Sec==0 and RZR_1) // Один раз в минуту { ESP01.print("AT+CIPSTA_CUR?\r\n"); // Получаем текущий IP-адрес bool RZR_1=false; } if (Cnt_Sec==30 and RZR_2) // Один раз в минуту { ESP01.print("AT+CWLAP\r\n"); // Получаем список доступных Wi-Fi сетей bool RZR_2=false; } }Теперь получаю ответ, но почему многократный:
IP адрес
Потому что не ждешь окончания предыдущей операции, очевидно. И кашу какую-то написал вместо работы со временем.
Задана разница по времени между командами 30 сек (
if(Cnt_Sec==0 and RZR_1 иif(Cnt_Sec==30 and RZR_2)), после каждой команды выдаётся запрет на повтор (boolRZR_1=false; иboolRZR_2=false;).Подскажите, где я должен ожидать окончания предыдущей операции? А каша, как Вы пишете, потому что взял простейший вариант именно для создания и контроля 30 сек интервала между командами.На любую команду есть ответ. Которого ты не ждешь. Нет, не простейший, а кошмарно черезжопный.
На любую команду есть ответ. Которого ты не ждешь. Нет, не простейший, а кошмарно черезжопный.
Про команду понятно, решение найдено, а про "кошмарно черезжопный"...
Во-первых, может чуть повежливее быть,
А во-вторых, поясните Вашу мысль.
По кракозябам.
Есть скорость общения ардуино с есп, а есть скорость общения ПК с ардуино.
Ну и соответственно они разные.
Кракозяблы устранены, повторы тоже. Теперь бы решить вопрос с обменом данными с ПК по Wi-Fi.
Никто не сталкивался?
Кракозяблы устранены, повторы тоже. Теперь бы решить вопрос с обменом данными с ПК по Wi-Fi.
Никто не сталкивался?
Любое ПО способное работать через сом-порт через wifi