Arduino Nano + ESP8266(ESP-01S)
- Войдите на сайт для отправки комментариев
Ср, 20/01/2021 - 13:35
Всем Доброго Дня!
Скажем так прошу немного помочь знающих людей. Заранее благодарю.
Вопрос то в принципе прост и вижу, что я где то в шаге от правильного ответа на свой вопрос, но не могу додумать суть. И так на ардуино нано залит скетч
// библиотека для работы программного Serial #include <SoftwareSerial.h> // создаём объект для работы с программным Serial // и передаём ему пины TX и RX SoftwareSerial mySerial(2, 3); // 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()); } }
И в нем все нормально.
Второй скетч заливаю в модуль ESP8266 (он же ESP-01S)
#include <ESP8266WiFi.h> #include <PubSubClient.h> #include <SoftwareSerial.h> // библиотека для работы программного Serial /////////////////// SETTINGS ///////////////////////////// //Подключаемся к домашнему роутеру const char* ssid ="switch01"; const char* password = "f89mn2xK"; // MQTT const char* mqtt_server = "m3.wqtt.ru"; //адрес сервера MQTT брокера const int mqtt_port = 3064; //порт сервера MQTT брокера const char* mqtt_user = "xxxxxxx"; //имя пользователя const char* mqtt_password = "xxxxxxxx"; //пароль // RELAY const String relay_topic = "led_top/svet"; const int RELAY = 2; ///////////////////////////////////////////////////////// WiFiClient espClient; PubSubClient client(espClient); bool relay_on = false; void setup_wifi() { delay(10); // We start by connecting to a WiFi network Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } randomSeed(micros()); Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } void updateStatusChannel(void){ if(relay_on){ digitalWrite(RELAY, HIGH); }else{ digitalWrite(RELAY, LOW); } } void callback(char* topic, byte* payload, unsigned int length) { String data_pay; for (int i = 0; i < length; i++) { data_pay += String((char)payload[i]); } Serial.println(data_pay); if( String(topic) == relay_topic ){ if(data_pay == "OFF") relay_on = true; if(data_pay == "ON") relay_on = false; } updateStatusChannel(); } void reconnect() { // Loop until we're reconnected while (!client.connected()) { Serial.print("Attempting MQTT connection..."); String clientId = "ESP8266-" + WiFi.macAddress(); // Attempt to connect if (client.connect(clientId.c_str(), mqtt_user, mqtt_password) ) { Serial.println("connected"); // Подписываемся на все подтопики client.subscribe( (relay_topic + "/#").c_str() ); } else { Serial.print("failed, rc="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); // Wait 5 seconds before retrying delay(5000); } } } void setup() { Serial.begin(115200); pinMode(RELAY, OUTPUT); digitalWrite(RELAY, LOW); // pinMode(3, OUTPUT); setup_wifi(); client.setServer(mqtt_server, mqtt_port); client.setCallback(callback); } void loop() { if (!client.connected()) { reconnect(); } client.loop(); }
И в нем тоже все работает, модуль связывается с Wi-FI и MQTT сервером и управляет диодом на ESP с помощью Алисы. Но суть не в этом.
Вопрос: Когда я открываю монитор порта и ввожу команду AT, AT+GMR (команды модулю esp-01) он команду ловит но ничего в монитор порта не отвечает, что нужно допилить? Укажите на путь истинный.
Вопрос: Когда я открываю монитор порта и ввожу команду AT, AT+GMR (команды модулю esp-01) он команду ловит но ничего в монитор порта не отвечает, что нужно допилить? Укажите на путь истинный.
Управление ЕСП через АТ команды и прошивка его своим кодом С++ - взаимоисключающие понятия.
Когда вы залили в ЕСП свою прошивку - вы затерли заводскую прошивку, работающую по АТ командам
[Управление ЕСП через АТ команды и прошивка его своим кодом С++ - взаимоисключающие понятия.
Когда вы залили в ЕСП свою прошивку - вы затерли заводскую прошивку, работающую по АТ командам
Уже хорошо, теперь понятно почему так происходит, тогда идем далее по дорожке, как сделать чтоб всё таки АТ работали и скетч выполнялся? Или же скетч писать на ардуино с AT командами для ESP модуля, а сам модуль не прошивать скетчем?
Уже хорошо, теперь понятно почему так происходит, тогда идем далее по дорожке, как сделать чтоб всё таки АТ работали и скетч выполнялся?
очевидно, написать на С++ свой интерпретатор АТ-команд :) Непонятно только, зачем... что такое вам нужно в виде АТ-команд. что вы не можете сделать сами в своей прошивке?
можно и так. Но тогда вам фактически всю логику сетевых взаимодействий придется кодировать на Нано и потом транслировать ее по Сериал в виде АТ-команд. Не сказал бы. что это проще...
Окей, писать свой интерпретатор не вариант, писать командами да согласен! Долго и нуторно переписывать все что и так в принципе работает. Тогда вопрос, как в скетче esp-01s запросить его IP адрес и состояние сети (connect, disconnect) и вывести его в порт либо же на экран дисплея?
Тогда вопрос, как в скетче esp-01s запросить его IP адрес и состояние сети (connect, disconnect) и вывести его в порт либо же на экран дисплея?
вы издеваетесь? в вашем коде в строчках 54-56 что написано?
Наверно вы этот код списали и ни строчки в нем не понимаете?
вы издеваетесь? в вашем коде в строчках 54-56 что написано? Наверно вы этот код списали и ни строчки в нем не понимаете?
)), чето я совсем уже съехал, просто сижу уже 7 день над этим делом, Теперь когда ты мне указал куда пялить всё встало на свои места. Оказалось всё просто, для того чтобы вывести данные на дисплей нужно всего то установить библиотеку Arduino LiquidCrystal, добавить в свой скетч строку для того чтобы вывести в дисплей ЖК
Где найти команды (или переменные по которым можно запросить данные которые прописаны в библиотеках #include <ESP8266WiFi.h> #include <PubSubClient.h> )? Могу погуглить но может у кого сразу ссылочки есть.
Где найти команды (или переменные по которым можно запросить данные которые прописаны в библиотеках #include <ESP8266WiFi.h> #include <PubSubClient.h> )?
не понял вопроса...
Если данные прописана в этих файлах - значит и переменные там же. Описания к библиотекам делаются редко. проще читать исходный код.
Ну например строка
в ней мы печатаем ip адрес откуда мы его выкопали?
еще такие моменты, например делаю кратковременное замыкание контактов (проще говоря ресет) контакт модуля esp-01s RTS на землю ардуино, в монитор пишет иногда всё ровно, а иногда такую хрень. Например:
В 3й раз вроде выдало все норм но в ip адресе и то после 168 выдало не "." а "`" получается если я буду выводить эти данные на LCD То у меня там будет то норм то бурда. Как это лечится?
Ну например строка
в ней мы печатаем ip адрес откуда мы его выкопали?
Антон, судя по вопросам, вам надо сначала почитать учебник по языку программирования.
строчка
означает метод localIP() обьекта WiFi
Ищете в коде, к какому классу относится этот обьект - далее находите файл. содержащий код класса и изучаете реализацию метода.
Только для начала ответьте себе на вопрос зачем?
Где найти команды (или переменные по которым можно запросить данные которые прописаны в библиотеках #include <ESP8266WiFi.h> #include <PubSubClient.h> )? Могу погуглить но может у кого сразу ссылочки есть.
Вы не поверите!
В файлах, которые называются "ESP8266WiFi.h" и "PubSubClient.h".