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

Нужна помощь Ардуино Нано + ESP-12

Sever44

Member
Всем привет!
Освоил прошивку ESP-12 для передачи данных на сервер CloudMQTT.
Теперь задача - использовать для этого пару Ардуино Нано + ESP-12.
Почему? Дело в том, что мне нужно передавать данные с нескольких аналоговых датчиков, а возится с мультиплексированием на единственный аналоговый вход стремно.
Подключил ESP-12 как положено:
Питание от отдельного источника 3,3 В.
TX Ардуины напрямую на TX ESP-12.
RX Ардууины через резистивный делитель на RX ESP-12.
CH_PD подтянут на 3,3 через резистор 10 кОм.
GPIO15 подтянут на GND через резистор 10 кОм.

При замыкании RST Ардуины на GND ESP-12 отвечает на АТ команды.
Прочитал версию прошивки:
AT version:1.1.0.0(May 11 2016 18:09:56)
SDK version:1.5.4(baaeaebb)
Ai-Thinker Technology Co. Ltd.
Jun 15 2016 18:44:09

Для начала залил в Ардуину пример из библиотеки: Arduino - WiFiClient
В СОМ порту при открытии или после нажатия кнопки RESET на Арлуине через пару секунд появляется сообщение:
Attempting to connect to WPA network...
SSID: ZyXEL........................
Couldn't get a wifi connection

Достаточно ли заводской прошивки для общение Ардуины и ESP?
Или нужно перепрошить ESP?
Или же в скетче чего-то не хватает?
Надеюсь на Вашу помощь.
Заранее признателен.
Игорь.

#include <SPI.h>
#include <WiFi.h>

char ssid[]="myNetwork"; // your network SSID (name)
char pass[]="myPassword";// your network password

int status = WL_IDLE_STATUS;
IPAddress server(74,125,115,105);// Google

// Initialize the client library
WiFiClient client;

voidsetup(){
Serial.begin(9600);
Serial.println("Attempting to connect to WPA network...");
Serial.print("SSID: ");
Serial.println(ssid);

status = WiFi.begin(ssid, pass);
if( status != WL_CONNECTED){
Serial.println("Couldn't get a wifi connection");
// don't do anything else:
while(true);
}
else{
Serial.println("Connected to wifi");
Serial.println("\nStarting connection...");
// if you get a connection, report back via serial:
if(client.connect(server,80)){
Serial.println("connected");
// Make a HTTP request:
client.println("GET /search?q=arduino HTTP/1.0");
client.println();
}
}
}

voidloop(){

}
 

=AK=

New member
Arduino - WiFiClient пытается работать с WiFi-шилдом. А его у вас нет. Обычный Ардуино ничего не знает ни о ESP8266, ни о АТ-командах.

И вообще вы не туда ломитесь. ESP8266 сам по себе может работать как Ардуино, причем он в десятки раз мошней Ардуино Нано. В среду Ардуино добавьте поддержку ESP8266, после этого сможете писать скетчи и заливать их прямо в ESP. Если не хватает аналоговых входов и боитесь поставить аналоговый мультиплексор, тогда добавьте к ESP внешний АЦП по I2C или по SPI, например, ADS1115.
 

Sever44

Member
Спасибо за ответ.
Заливку скетчей в ESP используя Arduino IDE освоил, причем для двух вариантов библиотек PubSubClient.
Соображения по поводу аппаратного расширения аналоговых возможностей ESP высказывал.
WiFi-шилда для Ардуино Нано не существует.
Ардуино Уно у меня нет.
Вопрос:
Что никак нельзя подружить Ардуино Нано и ESP?
 

=AK=

New member
WiFi-шилда для Ардуино Нано не существует.
Для Ардуино Нано подходят все обычные шилды Ардуино. Просто располагать и надо не "этажеркой", а на бредборде, и коммутировать проводами.

Что никак нельзя подружить Ардуино Нано и ESP?
Можно. Только нафиг никому не нужно.

Вам Ардуино Нано нужен только как расширитель аналоговых входов для ESP-12. А вы зачем-то в него WiFi скетчи заливаете. Он у вас должен работать просто как внешний АЦП для ESP-12. Но если вы немного подумаете, то поймете, что ADS1115 в качестве внешнего АЦП использовать намного проще и удобнее .
 
Последнее редактирование:

Sever44

Member
Насчет "каши" в чей-то голове не знаю.
Но упорно предлагать отказаться от Ардуино.....
Ведь она может не только обрабатывать большое количество аналоговых сигналов, но и выдавать цифровые сигналы на исполнительные устройства.
А ее скромных вычислительных возможностей мне по началу хватит.
Спасибо за беседу.
 

=AK=

New member
Но упорно предлагать отказаться от Ардуино.....
Как задачу формулируете, так и советую.

Ведь она может не только обрабатывать большое количество аналоговых сигналов, но и выдавать цифровые сигналы на исполнительные устройства.
То есть, вам еще и расширитель дискретных I/O нужен? Могли бы сразу сказать.

Наверное, еще одна причина - что у вас Нано уже в наличии, а ADS1115 еше покупать надо, потом PCB к ней делать (чего вы, возможно, не умеете), потом паять, и т.п.

А ее скромных вычислительных возможностей мне по началу хватит.
Расширителям ввода-вывода вообще никаких вычислительных мощностей не требуется, так что, действительно, хватит. Все, на что будут нужны вычислительные мощности Нано, - это на организацию интерфейса общения с ESP-12.
 

=AK=

New member
А там первый же вопрос был задан самый главный, в сущности, перефраз того, о чем я говорю. И, что характерно, тоже повис в воздухе:

Кто у Вас чего не исполняет? ESP шлёт ардуине команды, а она их не исполняет? Или как?

Только я не спрашиваю, поскольку иных вариантов в общем-то нет, по крайней мере для новичков. ESP должна слать Ардуине команды, а та их исполнять. То есть, Ардуина должна работать расширителем ввода-вывода для ESP. Когда вы это поймете, тогда вопрос о каше в голове более стоять не будет. А пока вы перескакиваете на AT команды - то, увы...
 

Sever44

Member
Хорошо, назовем Ардуину расширителем ввода-вывода для ESP.
Как в этом случае прочитать состояние цифровых выходов ESP и, главное, послать в ESP несколько оцифрованных аналоговых сигналов?
Только, пожалуйста, меньше каши, больше сути.
 

=AK=

New member
Хорошо, назовем Ардуину расширителем ввода-вывода для ESP.
Как в этом случае прочитать состояние цифровых выходов ESP и, главное, послать в ESP несколько оцифрованных аналоговых сигналов?
Все наоборот, поймите же наконец. Это ESP является мастером, а Ардуино - слугой. Не "Ардуино посылает в ESP несколько оцифрованных аналоговых сигналов", а ESP должен посылать команду в Ардуино и в ответ получить то, что запросил, будь то значение какого-то канала АЦП, или порта дискретного ввода, или подтверждение, что посланное значение выведено на дискретный вывод.

Причем набор этих команд вам придется изобрести самому. А потом написать скетчи для Ардуино и для ESP, которые будут работать друг с другом, используя эти команды.

Если бы выбрали готовый расширитель ввода-вывода, то команды вам изобретать бы не пришлось, набор команд уже намертво встроен в сам расширитель и описан в документации на него. Поэтому программно задача бы сильно упростилась, вам оставалось бы только написать скетчи для ESP. А с Ардуиной вам придется изобретать велосипед заново.

Впрочем, есть шанс что уже кто-то сделал эту работу за вас и выложил в опенсорс.
 

KomX

Member
О чём сей неуместный диспут?!
@Sever44, в плане расширения функционала Вы интуитивно выбрали правильную концепцию, - 2 микроконтроллера. Последуй советам "бывалых", Вы бы ограничили себя лишь чтением АЦП и отсылкой байтиков в расширитель пинов. В Вашей же связке Вы "лёгким движением руки" сможете организовывать различные таймеры, ШИМ, RGB, LCD и многое другое.
Определитесь только по какому интерфейсу будете производить обмен между МК. На выбор можно предложить как однопроводную связь, так и двупроводную. Определившись в интерфейсом выберите протокол, его команды и параметры, кто будет ведущий, а кто ведомый (можно использовать поочерёдно любой из МК).
Когда определитесь со всем этим, - приходите за советом.
 

stalkerkz

New member
Спасибо за ответ.
Заливку скетчей в ESP используя Arduino IDE освоил, причем для двух вариантов библиотек PubSubClient.
Соображения по поводу аппаратного расширения аналоговых возможностей ESP высказывал.
WiFi-шилда для Ардуино Нано не существует.
Ардуино Уно у меня нет.
Вопрос:
Что никак нельзя подружить Ардуино Нано и ESP?
можно и очень просто, нужно только учесть, что логические уровни esp8266 на 3,3 вольта, а ардуино нано на 5... поэтому нужно или самому сделать конвертер уровней или использовать готовый иначе не получиться данные передать...

я у себя сделал так... на нано подключил сенсоры, а затем к нано через конвертер уровней подключил esp-01 на ней делаю веб страничку, а данные с нано, чтобы они соответсвенно отображались на веб страничке, шлю по родному сериал порту нано на esp в формате json. ESP в свою очередь получает их парсит и рисует график. Теоретически я думаю можно так какие хочешь данные слать. Единственно скорость ограничена т.к. сериал порт использую.... а он тормознутый.

Короче смысл в том, что Вы должны сделать веб страницу для есп, вы должны это уметь... затем Вы должны написать прошивку для ардуино нано.. там эти данные будут обрабатываться и отправляться на есп, для отображения и т.п....

А вы конкретно, что хотите сделать?
 
Последнее редактирование:

Sever44

Member
Определитесь только по какому интерфейсу будете производить обмен между МК. На выбор можно предложить как однопроводную связь, так и двупроводную.
Если я правильно понял, под двухпроводной связью подразумевается RX, TX связи.
А что такое однопроводная связь?
 

=AK=

New member
Последуй советам "бывалых", Вы бы ограничили себя лишь чтением АЦП и отсылкой байтиков в расширитель пинов. В Вашей же связке Вы "лёгким движением руки" сможете организовывать различные таймеры, ШИМ, RGB, LCD и многое другое.
А какой в них смысл, если их гораздо проще организовать в ESP? Не надо плодить лишних сущностей. "Усложнять - просто, упрощать - сложно" (с)
 

Sever44

Member
можно и очень просто, нужно только учесть, что логические уровни esp8266 на 3,3 вольта, а ардуино нано на 5... поэтому нужно или самому сделать конвертер уровней или использовать готовый иначе не получиться данные передать...
Если я не ошибаюсь, достаточно RX с выхода Ардуины подать на вход RX ESP через резистивный делитель 1 кОм/2 кОм, а TX ESP (3,3 В) TX Ардуины и так поймет.
 

Sever44

Member
Короче смысл в том, что Вы должны сделать веб страницу для есп, вы должны это уметь...
Вопрос с обменом информацией между ESP и сервером CloudMQTT решен, причем для двух вариантов библиотек PubSubClient.
Осталось организовать обмен между Ардуино и ESP.
Думаю так:
При отправке данных на сервер ESP одновременно по Serial Port посылает данные в Ардуино, она (или он?) их читает, управляет исполнительными устройствами в соответствии с полученными данными и в ответ посылает числовые данные (оцифрованные аналоговые сигналы), а ESPполученные данные пересылает на сервер.
 

=AK=

New member
Если я правильно понял, под двухпроводной связью подразумевается RX, TX связи.
А что такое однопроводная связь?
Двухпроводная связь может быть сделана при помощи UART (это то, что вы назвали Rx, Tx) или же как интерфейс I2C. И ESP и Атмега имеют UART-ы, так что с аппаратной реализацией Rx/Tx проблем нет. Что касается I2C, то Атмега может работать как I2C слэйв, а в ESP нетрудно реализовать I2C мастера при помощи простого бит-банга.

Под однопроводной связью обычно подразумевается интерфейс 1-wire фирмы Dallas/Maxim. Однако ни ESP ни Атмега не имеют аппаратной поддержки этого интерфейса. И если 1-wire мастера не так уж сложно имитировать при помощи UART, то слэйва без специальной аппаратуры сделать очень трудно. Так что почему тут был упомянут однопроводный интерфейс мне тоже совершенно непонятно.

Еще один вполне возможный вариант - интерфейс SPI. Он тоже есть и в Ардуине, и в ESP. Но проводов потребуется больше, три или четыре.
 

=AK=

New member
При отправке данных на сервер ESP одновременно по Serial Port посылает данные в Ардуино, она (или он?) их читает, управляет исполнительными устройствами в соответствии с полученными данными и в ответ посылает числовые данные (оцифрованные аналоговые сигналы), а ESPполученные данные пересылает на сервер.
Забавно. :)

Если строго следовать описанию, то сначала ESP невесть откуда берет какие-то данные и отсылает их на MQTT сервер и отновременно - в Ардуино. Получив эти данные, Ардуино выводит их на цифровые выходы и запускает АЦП. Получив результаты из АЦП, Ардуино посылает их в ESP. Теперь круг замкнулся, ESP посылает эти данные на MQTT сервер и обратно в Ардуино, чтобы Ардуино вывел их на цифровой выход. :cool:

Непонятно только откуда ESP возьмет самые первые данные, чтобы процесс завертелся. И еще непонятно, зачем Ардуино сначала посылает данные в ESP, затем получает их же в виде эха назад, и только после этого выводит на цифровые выводы. Пусть уж сразу гонит результаты АЦП на цифровые выходы, если в этом есть хоть малейший смысл (может, для отладки?) :rolleyes:
 

Sever44

Member
Непонятно только откуда ESP возьмет самые первые данные, чтобы процесс завертелся.
Все начинается с того, что ESP, как клиент сервера CloudMQTT периодически (период задан в void loop) отправляет "аналоговые" данные, а в ответ получат "цифровые".
Эти странные слова я добавил, чтобы больше не путаницы с "данными".
 
Сверху Снизу