Подключение ESP-01 с использование адаптера сигналов и питания

Homo Faber
Offline
Зарегистрирован: 25.05.2019

Решил попробовать Wi-Fi модуль ESP-01 с адаптером сигналов и питания.

Вот такой адаптер:

А вот всё в сборе:

Это с другой стороны:

Купить Оптом ESP 01S ESP8266 Последовательный Wi Fi Беспроводной Модуль + ESP  01 Адаптер Для Arduino Отcnfoc008 В Категории Другие Аудио И Видеотехники,  741 руб. На Ru.Dhgate.Com | Dhgate

Распиновка контактов адаптера (слева направо):

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
 
В чём может быть проблема? Никто не подскажет?
Заранее благодарен.
Homo Faber
Offline
Зарегистрирован: 25.05.2019

Э-э, проблемка, не все изображения вставились. Не пойму в чём дело. Надеюсь общего вида достаточно. Если нет, то попробую повторить...

b707
Offline
Зарегистрирован: 26.05.2017

попробуйте в Мониторе порта выбрать другое окончание строки - если там CR + LF - поставьте только CR или наоборот

Homo Faber
Offline
Зарегистрирован: 25.05.2019

Отлично, помогло!
Даже получил список доступных Wi-Fi сетей:

AT+CWLAP
 
+CWLAP:(4,"M0ja_semja",-57,"e4:ca:12:97:9c:f7",1,-67,0)
+CWLAP:(3,"DIR-5",-80,"74:da:da:22:4d:72",1,-66,0)
+CWLAP:(4,"TP-LINK_3BE0",-73,"c8:8d:83:18:d7:a0",2,-26,0)
+CWLAP:(4,"ARTUR",-83,"ec:4d:47:9c:41:dc",5,-27,0)
+CWLAP:(3,"KRISTINA",-85,"54:a0:50:6e:55:84",8,-41,0)
+CWLAP:(3,"RTK 2_10",-82,"00:1f:ce:d0:30:98",10,-42,0)
+CWLAP:(3,"RT-GPON-37C0",-88,"14:2e:5e:e3:37:c0",11,-61,0)
 
Теперь буду разбираться дальше.
Ещё раз ОГРОМНОЕ СПАСИБО!!!
Homo Faber
Offline
Зарегистрирован: 25.05.2019

Получился огромный перерыв, скажем так, по семейным обстоятельствам.

Вернулся к разработке 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 сетей:

AT+CWLAP
 
+CWLAP:(4,"Purpe-1",-66,"10:a3:b8:36:46:61",1,-36,0)
+CWLAP:(4,"Kofanova",-78,"f4:b5:aa:94:66:1a",1,-39,0)
+CWLAP:(3,"Kristi",-88,"e4:26:86:9a:88:40",1,-51,0)
+CWLAP:(4,"M0ja_semja",-65,"e4:ca:12:97:9c:f7",11,-67,0)
+CWLAP:(4,"ARTUR",-85,"ec:4d:47:9c:41:dc",11,-29,0)
+CWLAP:(3,"ABU-HALID",-59,"64:2c:ac:09:a8:6c",3,-47,0)
+CWLAP:(4,"Anna",-80,"84:5b:12:b8:08:c8",5,-39,0)
+CWLAP:(3,"KRISTINA",-80,"54:a0:50:6e:55:84",8,-41,0)
+CWLAP:(3,"DIR-5",-73,"74:da:da:22:4d:72",9,-64,0)
+CWLAP:(4,"NASA",-87,"10:bf:48:38:ce:dc",13,-31,0)
+CWLAP:(3,"RTK 2_10",-74,"00:1f:ce:d0:30:98",13,-42,0)
 
А при использовании программного запроса получаю кракозяблы в ответ:
 
A⸮]1⸮H(ը⸮PC⸮usy⸮⸮rj⸮⸮(CC⸮⸮y \⸮)Q⸮
⸮HV⸮^\⸮⸮
AV]1⸮⸮HH׮$K⸮
AV]1⸮QVU(⸮Cɤ⸮⸮⸮r5C⸮r)⸮!r
⸮⸮(⸮u⸮UQVUj
C⸮⸮ł⸮⸮Ůյ⸮⸮rS
S⸮u⸮⸮⸮u⸮UQ⸮H⸮⸮HQVU(
C⸮⸮⸮A⸮C⸮զ⸮Ůյ⸮⸮r⸮⸮Ե⸮S⸮ԑ+⸮⸮b]Lu`,⸮⸮M⸮tS&⸮⸮ԞS⸮⸮/!⸮@⸮⸮r⸮⸮PյCP⸮ł⸮C⸮զŮյ⸮⸮r⸮]S⸮⸮⸮⸮աH⸮⸮⸮⸮⸮S*⸮⸮S
SS*
Sju⸮Sju⸮r⸮⸮VH⸮⸮H⸮C⸮⸮ł$ĥb⸮*⸮P⸮Itӊ⸮⸮ᩧ⸮E⸮SM⸮⸮ԨtS⸮⸮R⸮⸮]U⸮⸮]jS깹⸮!r⸮⸮]U⸮⸮]U(⸮CP⸮ł⸮i⸮⸮r⸮]S*⸮⸮S
SS*
S⸮u⸮⸮ju⸮P⸮⸮]U⸮⸮⸮r
K⸮Եu⸮Sju⸮Hju⸮⸮⸮u⸮P⸮ꠉ⸮Z⸮S⸮IKU⸮bDSj⸮'⸮jNCյCɤC⸮r
 
Очень много кракозябл, там не одна страница.
В конце программки видно, что использовались 2 варианта с WRITE и PRINTLN, принципиальной разницы не увидел.
Кто ни-будь может подсказать в чём косяк?
Заранее всем откликнувшимся спасибо.

 

Homo Faber
Offline
Зарегистрирован: 25.05.2019

Немного изменил отправку команд в 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 адрес

%⸮5%⸮H(⸮⸮T⸮⸮UR
)⸮͂r⸮H(ըTUPCUR5)⸮⸮⸮HըT⸮⸮UR)⸮͂r⸮(⸮T⸮*PUC⸮⸮*P⸮⸮⸮⸮$⸮⸮V⸮⸮.r⸮R⸮⸮⸮⸮⸮5⸮rR⸮p:"192.168.0.11"
+CIPSTA_CUR:gateway:"192.168.0.1"
+CIPSTA_CUR:netmask:"255.255.255.0"
 
OK
IPSTA_CUR?
 
ERROR
AT+CIPSTA_CUR?
 
A+CIPSTA_CUR:ip:"192.168.0.11"
+CIPSTA_CUR:gateway:"192.168.0.1"
+CIPSTA_CUR:netmask:"255.255.255.0"
 
OK
T+CIPSTA_CUR?
 
ERROR
AT+CIPSTA_CUR?
 
+CIPSTA_CUR:ip:"192.168.0.11"
+CIPSTA_CUR:gateway:"192.168.0.1"
+CIPSTA_CUR:netmask:"255.255.255.0"
 
OK
 
И ПРАВИЛЬНЫХ ответов повторы больше 10 раз
Ещё интересней список сетей:
 
A⸮]1⸮⸮H(ը⸮PC⸮usy⸮⸮rj⸮⸮(CC⸮⸮y ⸮⸮)⸮⸮u*⸮⸮/\KC⸮T+⸮1꤫+⸮P⸮⸮SP
 
⸮rr⸮!⸮⸮H.⸮⸮⸮⸮⸮⸮R⸮⸮⸮⸮S]⸮⸮⸮]P⸮(⸮jSC⸮⸮PŮ⸮S
⸮EZAU⸮⸮AT+CWLAP
 
busy p...
AT+CWLAP
 
busy p...
AT+CWLAP
 
busy p...
AT+CWLAP
 
busy p...
AT+CWLAP
 
busy p...
AT+CWLAP
 
busy p...
AT+CWLAP
 
busy p...
AT+CWLAP
 
busy p...
+CWLAP:(4,"Kofanova",-75,"f4:b5:aa:94:66:1a",1,-37,0)
+CWLAP:(4,"Purpe-1",-69,"10:a3:b8:36:46:61",1,-36,0)
+CWLAP:(3,"Kristi",-84,"e4:26:86:9a:88:40",1,-49,0)
+CWLAP:(4,"Tatyna",-88,"ec:4d:47:9c:65:a4",1,-27,0)
+CWLAP:(4,"ARTUR",-83,"ec:4d:47:9c:41:dc",11,-29,0)
+CWLAP:(4,"M0ja_semja",-65,"e4:ca:12:97:9c:f7",11,-67,0)
+CWLAP:(3,"ABU-HALID",-63,"64:2c:ac:09:a8:6c",4,-47,0)
+CWLAP:(4,"Anna",-79,"84:5b:12:b8:08:c8",4,-37,0)
+CWLAP:(4,"TP-LINK_3BE0",-85,"c8:8d:83:18:d7:a0",5,-24,0)
+CWLAP:(4,"Maksim",-85,"7c:26:64:3b:56:d4",5,-39,0)
+CWLAP:(3,"KRISTINA",-82,"54:a0:50:6e:55:84",8,-41,0)
+CWLAP:(3,"DIR-5",-79,"74:da:da:22:4d:72",9,-67,0)
+CWLAP:(3,"RTK 2_10",-77,"00:1f:ce:d0:30:98",13,-42,0)
+CWLAP:(4,"NASA",-87,"10:bf:48:38:ce:dc",13,-29,0)
 
OK
 
Вроде и получаю ответ, но с таким количеством повторов. Что за косяк?
 
rkit
Offline
Зарегистрирован: 23.11.2016

Потому что не ждешь окончания предыдущей операции, очевидно. И кашу какую-то написал вместо работы со временем.

Homo Faber
Offline
Зарегистрирован: 25.05.2019

Задана разница по времени между командами 30 сек (if (Cnt_Sec==0 and RZR_1 и if (Cnt_Sec==30 and RZR_2)), после каждой команды выдаётся запрет на повтор (bool RZR_1=false; и bool RZR_2=false;).

Подскажите, где я должен ожидать окончания предыдущей операции? А каша, как Вы пишете, потому что взял простейший вариант именно для создания и контроля 30 сек интервала между командами.

rkit
Offline
Зарегистрирован: 23.11.2016

На любую команду есть ответ. Которого ты не ждешь. Нет, не простейший, а кошмарно черезжопный.

Homo Faber
Offline
Зарегистрирован: 25.05.2019

rkit пишет:

На любую команду есть ответ. Которого ты не ждешь. Нет, не простейший, а кошмарно черезжопный.

Про команду понятно, решение найдено, а про "кошмарно черезжопный"...

Во-первых, может чуть повежливее быть,

А во-вторых, поясните Вашу мысль.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

По кракозябам.
Есть скорость общения ардуино с есп, а есть скорость общения ПК с ардуино.
Ну и соответственно они разные.

Homo Faber
Offline
Зарегистрирован: 25.05.2019

Кракозяблы устранены, повторы тоже. Теперь бы решить вопрос с обменом данными с ПК по Wi-Fi.
Никто не сталкивался?

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Homo Faber пишет:

Кракозяблы устранены, повторы тоже. Теперь бы решить вопрос с обменом данными с ПК по Wi-Fi.
Никто не сталкивался?

Любое ПО способное работать через сом-порт через wifi