• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь "Помехи" в работе.

soksokolov

New member
Добрый вечер. Нужна ваша помощь. При работе с ESP8266 (01) и ардуино уно возникают помехи, иногда запрос доходит, а иногда нет. Мне нужно настроить удаленный доступ к сервоприводам. Так как опыта работы в данной области почти нет, воспользовался вот этим туториалом:

Wi-Servo: Wi-Fi Browser Controlled Servomotors - Arduino Project Hub

Все получилось, нашел рабочую скорость (как я думаю) но работает все это добро не стабильно. Вот что вижу в терминале: https://b.radikal.ru/b16/1801/26/ad0188df0762.png.
Используемый код (не мой):

// Wi-Servo v1.0 By Igor Fonseca Albuquerque

//include libraries
#include <SoftwareSerial.h>
#include <Servo.h>

SoftwareSerial esp8266(5, 4); //set ESP8266 RX pin = 5, and TX pin = 4

//define variables
#define DEBUG true //display ESP8266 messages on Serial Monitor
#define SERV1 9 //servo 1 on digital port 9
#define SERV2 10 //servo 2 on digital port 10

Servo s1; //servo 1
Servo s2; //servo 2
int pos1 = 170; //servo 1 current position
int pos2 = 170; //servo 2 current position
int vel = 10; //servos' speed (100 -> 90º in 1 s)(1 -> 90º in 9 s)
int pos1min = 20; //servo 1 minimum position
int pos2min = 20; //servo 2 minimum position
int pos1max = 160; //servo 1 maximum position
int pos2max = 160; //servo 2 maximum position


//**************
// Arduino Setup
//**************
void setup()
{

//attach and set servos' angles
s1.attach(SERV1);
s2.attach(SERV2);
s1.write(pos1max);
s2.write(pos2max);
//detach servos
s1.detach();
s2.detach();

//start serial communication
Serial.begin(9600);
esp8266.begin(115200);

sendData("AT+RST\r\n", 2000, DEBUG); //reset module
sendData("AT+CWMODE=1\r\n", 1000, DEBUG); //set station mode
sendData("AT+CWJAP=\"wi-fi\",\"19101994\"\r\n", 2000, DEBUG); //connect wifi network
while(!esp8266.find("OK")) { //wait for connection
}
sendData("AT+CIFSR\r\n", 1000, DEBUG); //show IP address
sendData("AT+CIPMUX=1\r\n", 1000, DEBUG); //allow multiple connections
sendData("AT+CIPSERVER=1,80\r\n", 1000, DEBUG); // start web server on port 80
}

//**********
// Main Loop
//**********
void loop()
{
if (esp8266.available()) //check if there is data available on ESP8266
{
if (esp8266.find("+IPD,")) //if there is a new command
{
String msg;
esp8266.find("?"); //run cursor until command is found
msg = esp8266.readStringUntil(' '); //read the message
String command = msg.substring(0, 3); //command is informed in the first 3 characters. "sr1" = command to servo #1 and "sr2" = command to servo #2
String valueStr = msg.substring(4); //next 3 characters inform the desired angle
int value = valueStr.toInt(); //convert to integer
if (DEBUG) {
Serial.println(command);
Serial.println(value);
}
delay(100);

//************
// move servos
//************

//move servo1 to desired angle
if(command == "sr1") {
//limit input angle
if (value >= pos1max) {
value = pos1max;
}
if (value <= pos1min) {
value = pos1min;
}
s1.attach(SERV1); //attach servo
while(pos1 != value) {
if (pos1 > value) {
pos1 -= 1;
s1.write(pos1);
delay(100/vel);
}
if (pos1 < value) {
pos1 += 1;
s1.write(pos1);
delay(100/vel);
}
}
s1.detach(); //dettach
}

//move servo2 to desired angle
if(command == "sr2") {
//limit input angle
if (value >= pos2max) {
value = pos2max;
}
if (value <= pos2min) {
value = pos2min;
}
s2.attach(SERV2);
while(pos2 != value) {
if (pos2 > value) {
pos2 -= 1;
s2.write(pos2);
delay(100/vel);
}
if (pos2 < value) {
pos2 += 1;
s2.write(pos2);
delay(100/vel);
}
}
s2.detach();
}
}
}
}


//********************
// Auxiliary functions
//********************

//send data to ESP8266
String sendData(String command, const int timeout, boolean debug)
{
String response = "";
esp8266.print(command);
long int time = millis();
while ( (time + timeout) > millis())
{
while (esp8266.available())
{
char c = esp8266.read();
response += c;
}
}
if (debug)
{
Serial.print(response);
}
return response;
}
 

=AK=

New member
Вы выбрали худший из возможных вариантов - связка двух процессоров, да еще и с АТ командами. Не советую тратить время на АТ команды, это тупиковая ветвь. ESP8266 сам по себе мощный процессор. Ему внешняя Ардуина не нужна, он сам все может сделать - и по WiFi общаться, и моторами управлять.

Вот, например, проект управления сервомотором в среде NodeMCU: ESP8266 servo

Но лучше поставьте поддержку ESP8266 в среду Ардуино, GitHub - esp8266/Arduino: ESP8266 core for Arduino После этого вы сможете писать скетчи и грузить их прямо в свой модуль. Серво библиотека там есть.

А еще лучше если при этом вы для начала будете использовать модуль NodeMCU. Он годится для работы в среде Ардуино. С ним работать проще - и пинов больше выведено, и блок питания есть, и переходник USB-UART встроен.
 

soksokolov

New member
Спасибо большое за помощь. Учту Ваши советы и сегодня попробую NodeMCU. Надеюсь это реально упростит задачу :)
 

soksokolov

New member
Вы выбрали худший из возможных вариантов - связка двух процессоров, да еще и с АТ командами. Не советую тратить время на АТ команды, это тупиковая ветвь. ESP8266 сам по себе мощный процессор. Ему внешняя Ардуина не нужна, он сам все может сделать - и по WiFi общаться, и моторами управлять.

Вот, например, проект управления сервомотором в среде NodeMCU: ESP8266 servo

Но лучше поставьте поддержку ESP8266 в среду Ардуино, GitHub - esp8266/Arduino: ESP8266 core for Arduino После этого вы сможете писать скетчи и грузить их прямо в свой модуль. Серво библиотека там есть.

А еще лучше если при этом вы для начала будете использовать модуль NodeMCU. Он годится для работы в среде Ардуино. С ним работать проще - и пинов больше выведено, и блок питания есть, и переходник USB-UART встроен.
Пошастал по форуму и понял, что все советуют использовать esp8266 без ардуино. Подскажите, теоретически, есть ли какое-то преимущество использовать ардуино + esp8266?
 

CodeNameHawk

Moderator
Команда форума
есть ли какое-то преимущество использовать ардуино + esp8266
Повышенная надежность системы.
н.п. У меня похоже сделано управление котлом, стоит Атмега16 и есп.
Отсутствие связи или подвисание есп не влияют на работу котла.
 
Сверху Снизу