Как подключить WiFi модуль ESP01 к Arduino UNO через HardwareSerial (пины 0 и 1)

Homo Faber

✩✩✩✩✩✩✩
9 Мар 2022
15
0
Здравствуйте!
Имею небольшой проект, всё работает замечательно, НО... Решил расширить функционал. Для этого понадобились 2 цифровых входа, свободных нет. Как вариант переходить на Mega пока не вижу смысла. Решил переключить WiFi модуль с SoftwareSerial на HardwareSerial. Кое что нарыл в Internet, сделал пробный скетч:
C++:
#define ser1 Serial
#include <BlynkSimpleShieldEsp8266.h>                             // Библиотека для работы с внешним модулем ESP8266 (ESP-01)

char auth[] = "******************";                               // Идентификатор
char ssid[] = "******************";                               // Точка доступа
char pass[] = "******************";                               // Пароль
WidgetLED Led_A(V3);                                              // Подключаем виртуальный светодиод V3

unsigned long A_Timer;                                            // Значение миллисекунд
bool B_Start = true;                                              // Флаг первичной посылки состояния

#define BLYNK_GREEN     "#00FF00"                                 // Определение цвета ЗЕЛЁНЫЙ
#define BLYNK_YELLOW    "#FFFF00"                                 // Определение цвета ЖЁЛТЫЙ
#define BLYNK_RED       "#FF0000"                                 // Определение цвета КРАСНЫЙ
#define BLYNK_BLUE      "#0000FF"                                 // Определение цвета СИНИЙ

void setup()                                                      // Установки
{
Serial.begin(9600);
  delay(10);                                                      // Задержка 10 mS

  Blynk.begin(auth, ser1, ssid, pass);                            // Соединяемся с BLYNK
//  Blynk.config(auth);
//  Blynk.connectWiFi(ssid, pass);
//  Blynk.connect();
 
  Led_A.on();                                                     // Включаем виртуальный светодиод 2, чтобы видеть цвета
  A_Timer=millis();
}

void loop()                                                       // Основная программа
{
  Blynk.run();                                                    // Запуск BLYNK

  if (millis() - A_Timer >= 1000)
     {
      if (B_Start)
         {
          Led_A.setColor(BLYNK_RED);                              // Индикатор  КРАСНЫЙ
         }
      else
         {
          Led_A.setColor(BLYNK_GREEN);                            // Индикатор ЗЕЛЁНЫЙ
         }
          B_Start=not B_Start;
     }
}
Но, на этапе компиляции получаю ошибку:

D:\Arduino наработки и примеры\Пробные скетчи\ESP8266_HS\ESP8266_HS.ino: In function 'void setup()':
ESP8266_HS:27:37: error: no matching function for call to 'BlynkWifi::begin(char [33], HardwareSerial&, char [12], char [9])'
In file included from D:\Arduino наработки и примеры\Пробные скетчи\ESP8266_HS\ESP8266_HS.ino:2:0:
C:\Users\���_���\Documents\Arduino\libraries\blynk-library-master\src/BlynkSimpleShieldEsp8266.h:180:10: note: candidate: void BlynkWifi::begin(const char*, ESP8266&, const char*, const char*, const char*, uint16_t)
void begin(const char* auth,
^~~~~
C:\Users\���_���\Documents\Arduino\libraries\blynk-library-master\src/BlynkSimpleShieldEsp8266.h:180:10: note: no known conversion for argument 2 from 'HardwareSerial' to 'ESP8266&'
exit status 1
no matching function for call to 'BlynkWifi::begin(char [33], HardwareSerial&, char [12], char [9])'


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

Kir

★✩✩✩✩✩✩
28 Мар 2020
69
16
@Homo Faber, в метод begin вторым аргументом ожидается ссылка на экземпляр типа ESP8266, а вы пытаетесь скормить HardwareSerial.
 

Homo Faber

✩✩✩✩✩✩✩
9 Мар 2022
15
0
Вот в этом вся и загвоздка. Не могу пока понять, как передать методу, что подключается ESP8266 (ESP01). При использовании SoftwareSerial всё понятно:
C++:
#include <BlynkSimpleShieldEsp8266.h>                             // Библиотека для работы с внешним модулем ESP8266 (ESP-01)
#include <SoftwareSerial.h>                                       // Библиотека програмной реализации обмена по UART-протоколу

...
   
SoftwareSerial ESP01(3, 4);                                       // Запуск протокола обмена Arduino c ESP-01

...
   
ESP01.begin(9600);                                                // Подключаем модуль ESP8266(ESP-01) на заданной скорости

...

Blynk.begin(auth, wifi, ssid, pass);                              // Соединяемся с BLYNK
Вопрос именно в том, как передать это методу... Я, честно говоря, не могу это понять. Поэтому и прошу помощи.
 

Kir

★✩✩✩✩✩✩
28 Мар 2020
69
16
@Homo Faber, через конструктор, который у вас запрятан за многоточием.

C++:
#include <BlynkSimpleShieldEsp8266.h>                             // Библиотека для работы с внешним модулем ESP8266 (ESP-01)
#include <SoftwareSerial.h>                                       // Библиотека програмной реализации обмена по UART-протоколу

...
  
SoftwareSerial ESP01(3, 4);                                       // Запуск протокола обмена Arduino c ESP-01

ESP8266 wifi(&ESP01);
  
ESP01.begin(9600);                                                // Подключаем модуль ESP8266(ESP-01) на заданной скорости

...

Blynk.begin(auth, wifi, ssid, pass);                              // Соединяемся с BLYNK
 

Homo Faber

✩✩✩✩✩✩✩
9 Мар 2022
15
0
@Kir, Не совсем уверен, что понял Вас. Если ухожу на HarwareSerial, то зачем мне нужен SoftwareSerial? А за многоточием я спрятал объявления переменных, подключения других библиотек и т.д., что в данном случае не принципиально.

@bort707,А там, кроме передачи в SotwareSerial другого ничего и нет, всё остальное я скрыл, дабы не загромождать программу для восприятия.
 

bort707

★★★★★★✩
21 Сен 2020
3,056
910
А за многоточием я спрятал объявления переменных, подключения других библиотек и т.д., что в данном случае не принципиально.
за многоточием вы спрятали именно тут строчку. куда надо было вставлять ваш HardwareSerial
Вообще, если у вас не получается самому исправить код - значит вы не вполне понимаете, как он работает. А раз не понимаете, не надо пытаться "спрятать ненужные части", ибо вы не понимаете, какие части нужные, а какие нет
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,263
1,301
Москва
Для одного из проектов делал так:
C++:
#ifdef MEGA
#define SIM800 Serial1
#else
#include <SoftwareSerial.h> // библиотека софт-сериал
SoftwareSerial SIM800L(SIM_TX, SIM_RX);  // софт-сериал для общения с модулем GSM
#define SIM800 SIM800L
#endif
а далее:
SIM800.begin(9600);
и везде использовал этот алиас.
 

Homo Faber

✩✩✩✩✩✩✩
9 Мар 2022
15
0
Тогда, возможно, такой вариант
C++:
#include <BlynkSimpleShieldEsp8266.h>                             // Библиотека для работы с внешним модулем ESP8266 (ESP-01)
char auth[] = "*********************";                 // Идентификатор
char ssid[] = "*********************";                                      // Точка доступа
char pass[] = "*********************";                                         // Пароль

ESP8266 wifi(&HardwareSerial);  // Подключаем ESP через HardwareSerial

WidgetLED Led_A(V3);                                              // Подключаем виртуальный светодиод V3
unsigned long A_Timer;                                            // Значение миллисекунд
bool B_Start = true;                                              // Флаг первичной посылки состояния
#define BLYNK_GREEN     "#00FF00"                                 // Определение цвета ЗЕЛЁНЫЙ
#define BLYNK_YELLOW    "#FFFF00"                                 // Определение цвета ЖЁЛТЫЙ
#define BLYNK_RED       "#FF0000"                                 // Определение цвета КРАСНЫЙ
#define BLYNK_BLUE      "#0000FF"                                 // Определение цвета СИНИЙ
void setup()                                                      // Установки
{
  Blynk.begin(auth, wifi, ssid, pass);                            // Соединяемся с BLYNK
  Led_A.on();                                                     // Включаем виртуальный светодиод 2, чтобы видеть цвета
  A_Timer=millis();
}
 
void loop()                                                       // Основная программа
{
  Blynk.run();                                                    // Запуск BLYNK
  if (millis() - A_Timer >= 1000)
     {
      if (B_Start)
         {
          Led_A.setColor(BLYNK_RED);                              // Индикатор  КРАСНЫЙ
         }
      else
         {
          Led_A.setColor(BLYNK_GREEN);                            // Индикатор ЗЕЛЁНЫЙ
         }
          B_Start=not B_Start;
     }
}
 

Kir

★✩✩✩✩✩✩
28 Мар 2020
69
16
@Kir, Не совсем уверен, что понял Вас. Если ухожу на HarwareSerial, то зачем мне нужен SoftwareSerial? А за многоточием я спрятал объявления переменных, подключения других библиотек и т.д., что в данном случае не принципиально.
Тогда все ещё проще

C++:
#include <BlynkSimpleShieldEsp8266.h>                             // Библиотека для работы с внешним модулем ESP8266 (ESP-01)
...

ESP8266 wifi(&Serial);
 
Serial.begin(9600);                                                // Подключаем модуль ESP8266(ESP-01) на заданной скорости
...
Blynk.begin(auth, wifi, ssid, pass);                              // Соединяемся с BLYNK
 
  • Лойс +1
Реакции: Homo Faber

Homo Faber

✩✩✩✩✩✩✩
9 Мар 2022
15
0
@Старик Похабыч, Извините, не совсем Вас понял, ведь я хочу уйти от SoftwareSerial, с тем, что бы использовать HardwareSerial...

@Kir, О, похоже это то что нужно. Весьма благодарен. Как только доберусь до запчастей немедленно опробую и отпишусь.

@Kir,Как приятно иметь дело с профессионалом. Всё заработало с полпинка! Огромное спасибо!!!