Подключение ESP-01 с использование адаптера сигналов и питания
- Войдите на сайт для отправки комментариев
Ср, 16/09/2020 - 13:34
Решил попробовать Wi-Fi модуль ESP-01 с адаптером сигналов и питания.
Вот такой адаптер:
А вот всё в сборе:
Это с другой стороны:
Распиновка контактов адаптера (слева направо):
GND
VCC
TX
RX
Пользовался ли кто-нибудь таким адаптером? Я подключил его к Arduino и залил скетч:
01 | #include <SoftwareSerial.h> |
02 | |
03 | // создаём объект для работы с программным Serial |
04 | // и передаём ему пины TX и RX |
05 | SoftwareSerial mySerial(9, 8); |
06 | |
07 | // serial-порт к которому подключён Wi-Fi модуль |
08 | #define WIFI_SERIAL mySerial |
09 | |
10 | void setup () |
11 | { |
12 | // открываем последовательный порт для мониторинга действий в программе |
13 | // и передаём скорость 9600 бод |
14 | Serial .begin(9600); |
15 | while (! Serial ) { |
16 | // ждём, пока не откроется монитор последовательного порта |
17 | // для того, чтобы отследить все события в программе |
18 | } |
19 | Serial .print( "Serial init OK\r\n" ); |
20 | // открываем Serial-соединение с Wi-Fi модулем на скорости 115200 бод |
21 | WIFI_SERIAL.begin(115200); |
22 | } |
23 | |
24 | void loop () |
25 | { |
26 | // если приходят данные из Wi-Fi модуля - отправим их в порт компьютера |
27 | if (WIFI_SERIAL.available()) { |
28 | Serial .write(WIFI_SERIAL.read()); |
29 | } |
30 | // если приходят данные из компьютера - отправим их в Wi-Fi модуль |
31 | if ( Serial .available()) { |
32 | WIFI_SERIAL.write( Serial .read()); |
33 | } |
34 | } |
Скетч честно скопировал с 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.
Вот чуть-чуть доработанный программный модуль:
01
#include <Wire.h> // Бибилиотека для I2C (SDA - A4, SCL - A5)*
02
#include <DS1307RTC.h> // Библиотека для модуля часов*
03
#include <I2C_LCD_RUS_NoCyrB.h> // Библиотека для LCD индикатора
04
#include <SoftwareSerial.h> // Библиотека програмной реализации обмена по UART-протоколу
05
06
SoftwareSerial ESP01(9, 8);
// 8 - RX, 9 - TX, соответствует обозначениям на адаптере питания и сигналов модуля ESP-01
07
I2C_LCD_RUS_NoCyrB lcd(0x27, 16, 2);
// Подключаем LCD (адрес, 16 столбцов, 2 строки)
08
09
unsigned
long
Old_Mil;
// Предыдущее значение милисекунд
10
11
void
setup
()
12
{
13
Serial
.begin(9600);
// Подключаем последовательный порт со скоростью 9600
14
lcd.begin();
// Инициализация ЖК дисплея
15
Serial
.println(
"Serial init OK"
);
16
// Начинаем инициализацию модуля ESP-01
17
ESP01.begin(9600);
// Подключаем модуль ESP-01 на скорости 9600
18
ESP01.write(
"AT+CWMODE_DEF=3"
);
// Переводим модуль в смешанный режим (точка доступа/клиент)
19
ESP01.write(
"AT+CWJAP=\"**********\",\"**********\""
);
// Подключаемся к Wi-Fi сети (сеть "M0ja_semja", пароль "27051962")
20
// Вывод сообщения на LCD монитор
21
lcd.clear();
22
lcd.print(
"МОДУЛЬ ESP-01"
);
23
Old_Mil=millis;
// Текущее значение миллисекунд
24
}
25
26
void
loop
()
27
{
28
if
(ESP01.available())
// Если приходят данные из Wi-Fi модуля - отправим их в порт компьютера
29
{
30
Serial
.write(ESP01.read());
// Отправляем их в порт компьютера
31
}
32
if
(
Serial
.available())
// Если приходят данные из компьютера
33
{
34
ESP01.write(
Serial
.read());
// Отправяем их в Wi-Fi модуль
35
}
36
if
(millis()-Old_Mil>=60000)
// Один раз в минуту
37
{
38
Old_Mil=millis;
// Новое значение миллисекунд
39
// ESP01.write("AT+CWLAP"); // Получаем список доступных Wi-Fi сетей
40
ESP01.println(
"AT+CWLAP"
);
// Получаем список доступных Wi-Fi сетей
41
}
42
}
Странно, что введя руками AT+CWLAP, получаю честный список доступных Wi-Fi сетей:
Немного изменил отправку команд в Wi-Fi модуль:
01
#include <Wire.h> // Бибилиотека для I2C (SDA - A4, SCL - A5)*
02
#include <DS1307RTC.h> // Библиотека для модуля часов*
03
#include <I2C_LCD_RUS_NoCyrB.h> // Библиотека для LCD индикатора
04
#include <SoftwareSerial.h> // Библиотека програмной реализации обмена по UART-протоколу
05
06
SoftwareSerial ESP01(9, 8);
// 8 - RX, 9 - TX, соответствует обозначениям на адаптере питания и сигналов модуля ESP-01
07
I2C_LCD_RUS_NoCyrB lcd(0x27, 16, 2);
// Подключаем LCD (адрес, 16 столбцов, 2 строки)
08
09
unsigned
long
Old_MilS;
// Предыдущее значение милисекунд для вывода секунд
10
int
Cnt_Sec=0;
11
bool
RZR_1=
false
;
12
bool
RZR_2=
false
;
13
14
void
setup
()
15
{
16
Serial
.begin(9600);
// Подключаем последовательный порт со скоростью 9600
17
lcd.begin();
// Инициализация ЖК дисплея
18
Serial
.println(
"Serial init OK"
);
19
// Начинаем инициализацию модуля ESP-01
20
ESP01.begin(9600);
// Подключаем модуль ESP-01 на скорости 9600
21
ESP01.write(
"ATE=0"
);
// Включаем/выключаем эхосигнал
22
ESP01.write(
"AT+SLEEP=0"
);
// Выключаем режим сна
23
ESP01.write(
"AT+CWMODE_DEF=3"
);
// Переводим модуль в смешанный режим (точка доступа/клиент)
24
ESP01.write(
"AT+CWJAP=\"**********\",\"**********\""
);
// Подключаемся к Wi-Fi сети (сеть "M0ja_semja", пароль "27051962")
25
// Вывод сообщения на LCD монитор
26
lcd.clear();
27
lcd.print(
"МОДУЛЬ ESP-01"
);
28
Old_MilS=millis();
// Текущее значение миллисекунд для вывода секунд
29
}
30
31
void
loop
()
32
{
33
if
(ESP01.available())
// Если приходят данные из Wi-Fi модуля - отправим их в порт компьютера
34
{
35
Serial
.write(ESP01.read());
// Отправляем их в порт компьютера
36
}
37
if
(
Serial
.available())
// Если приходят данные из компьютера
38
{
39
ESP01.write(
Serial
.read());
// Отправяем их в Wi-Fi модуль
40
}
41
if
(millis()-Old_MilS>=1000)
// Один раз в секунду
42
{
43
Old_MilS=millis();
// Новое значение миллисекунд для вывода секунд
44
Cnt_Sec++;
45
if
(Cnt_Sec>=60)
46
{
47
Cnt_Sec=0;
48
lcd.setCursor(0,1);
49
lcd.print(
" "
);
50
RZR_1=
true
;
51
RZR_2=
true
;
52
}
53
lcd.setCursor(0,1);
54
lcd.print(Cnt_Sec);
55
}
56
if
(Cnt_Sec==0 and RZR_1)
// Один раз в минуту
57
{
58
ESP01.print(
"AT+CIPSTA_CUR?\r\n"
);
// Получаем текущий IP-адрес
59
bool
RZR_1=
false
;
60
}
61
if
(Cnt_Sec==30 and RZR_2)
// Один раз в минуту
62
{
63
ESP01.print(
"AT+CWLAP\r\n"
);
// Получаем список доступных Wi-Fi сетей
64
bool
RZR_2=
false
;
65
}
66
}
Теперь получаю ответ, но почему многократный:
IP адрес
Потому что не ждешь окончания предыдущей операции, очевидно. И кашу какую-то написал вместо работы со временем.
Задана разница по времени между командами 30 сек (
if
(Cnt_Sec==0 and RZR_1 и
if
(Cnt_Sec==30 and RZR_2)
)
, после каждой команды выдаётся запрет на повтор (bool
RZR_1=
false
; и
bool
RZR_2=
false
;).
Подскажите, где я должен ожидать окончания предыдущей операции? А каша, как Вы пишете, потому что взял простейший вариант именно для создания и контроля 30 сек интервала между командами.
На любую команду есть ответ. Которого ты не ждешь. Нет, не простейший, а кошмарно черезжопный.
На любую команду есть ответ. Которого ты не ждешь. Нет, не простейший, а кошмарно черезжопный.
Про команду понятно, решение найдено, а про "кошмарно черезжопный"...
Во-первых, может чуть повежливее быть,
А во-вторых, поясните Вашу мысль.
По кракозябам.
Есть скорость общения ардуино с есп, а есть скорость общения ПК с ардуино.
Ну и соответственно они разные.
Кракозяблы устранены, повторы тоже. Теперь бы решить вопрос с обменом данными с ПК по Wi-Fi.
Никто не сталкивался?
Кракозяблы устранены, повторы тоже. Теперь бы решить вопрос с обменом данными с ПК по Wi-Fi.
Никто не сталкивался?
Любое ПО способное работать через сом-порт через wifi