Wemos ATmega328P+ESP8266 32Mb не видит датчиков
- Войдите на сайт для отправки комментариев
Здравствуйте, пишу от отчаяния. Потратил неделю на прошивку этой платы.
Делаю проект Telegram + датчики воды / температуры / дыма. Есть у меня Wemos D1 c esp8266 на борту, все прошил, все отлично, но уперся в один аналоговый выход, этого для меня очень мало.
Решил купить навороченнее плату чтобы много выходов, вайфай на борту. Приобрел на свою голову две платы:
Выставил пины 5/6/7 в ON, остальные OFF, прошил, отключил 7 пин, в мониторе порта вайфай подключился, а вот датчики не показывает. Пробовал прошить Blink - тоже ноль на массу. Прошило 100%, а мигает как обычно.
Пробовал менять версии библиотек, менять платы в настройках плат, менять настройки прошивки, облазил весь интернет. Короче за неделю я забрутфорсил почти все варианты прошивки. Плата отправляет сообщения в телеграм, видит входящие, но вот датчики не видит. Я уже все порты перепробовал.
Так как купил две таких, подумал первая брак, у второй аналогичное поведение. Датчики живые, вставляю в старую Wemos D1 - все прекрасно.
Сейчас настройки на которых прошивается успешно и работает телеграм:
Помогите пожалуйста разобраться, я уже сделал все что смог.
Код программы:
#include <ESP8266WiFi.h> #include <WiFiClientSecure.h> #include <UniversalTelegramBot.h> #include <FS.h> #include <ArduinoJson.h> #include "DHT.h" #define alarm 0 //Активная пищалка подключается на D4 плюсом и минусом на GND #define DHTPIN 2 // Датчик температуры #define DHTTYPE DHT22 #define BOTtoken "714045601:AAE92GHOC-z3lAqVm_nRA5as5sh1ju8tcgs" DHT dht(DHTPIN, DHTTYPE); char ssid[] = "Natella"; // your network SSID (name) char password[] = "Natella1103"; // your network key WiFiClientSecure secured_client; UniversalTelegramBot bot(BOTtoken, secured_client); int Bot_mtbs = 2000; // mean time between scan messages long Bot_lasttime; // last time messages' scan has been done int bulk_messages_mtbs = 1500; // mean time between send messages, 1.5 seconds int messages_limit_per_second = 25; // Telegram API have limit for bulk messages ~30 messages per second String subscribed_users_filename = "subscribed_users.json"; DynamicJsonBuffer jsonBuffer; void handleNewMessages(int numNewMessages) { Serial.println("handleNewMessages"); Serial.println(String(numNewMessages)); for (int i = 0; i < numNewMessages; i++) { String chat_id = String(bot.messages[i].chat_id); String text = bot.messages[i].text; String from_name = bot.messages[i].from_name; if (from_name == "") from_name = "Guest"; if (text == "/start") { if (addSubscribedUser(chat_id, from_name)) { String welcome = "This is Bulk Messages example.\n\n"; welcome += "/showallusers : show all subscribed users\n"; welcome += "/testbulkmessage : send test message to subscribed users\n"; welcome += "/removeallusers : remove all subscribed users\n"; welcome += "/stop : unsubscribe from bot\n"; bot.sendMessage(chat_id, welcome, "Markdown"); } else { bot.sendMessage(chat_id, "Something wrong, please try again (later?)", ""); } } if (text == "/stop") { if (removeSubscribedUser(chat_id)) { bot.sendMessage(chat_id, "Thank you, " + from_name + ", we always waiting you back", ""); } else { bot.sendMessage(chat_id, "Something wrong, please try again (later?)", ""); } } if (text == "/testbulkmessage") { sendMessageToAllSubscribedUsers("ATTENTION, this is bulk message for all subscribed users!"); } if (text == "/showallusers") { File subscribedUsersFile = SPIFFS.open("/" + subscribed_users_filename, "r"); if (!subscribedUsersFile) { bot.sendMessage(chat_id, "No subscription file", ""); } size_t size = subscribedUsersFile.size(); if (size > 1024) { bot.sendMessage(chat_id, "Subscribed users file is too large", ""); } else { String file_content = subscribedUsersFile.readString(); bot.sendMessage(chat_id, file_content, ""); } } if (text == "/removeallusers") { if (SPIFFS.remove("/" + subscribed_users_filename)) { bot.sendMessage(chat_id, "All users removed", ""); } else { bot.sendMessage(chat_id, "Something wrong, please try again (later?)", ""); } } } } JsonObject& getSubscribedUsers() { File subscribedUsersFile = SPIFFS.open("/" + subscribed_users_filename, "r"); if (!subscribedUsersFile) { Serial.println("Failed to open subscribed users file"); // Create empty file (w+ not working as expect) File f = SPIFFS.open("/" + subscribed_users_filename, "w"); f.close(); JsonObject& users = jsonBuffer.createObject(); return users; } else { size_t size = subscribedUsersFile.size(); if (size > 1024) { Serial.println("Subscribed users file is too large"); //return users; } String file_content = subscribedUsersFile.readString(); JsonObject& users = jsonBuffer.parseObject(file_content); if (!users.success()) { Serial.println("Failed to parse subscribed users file"); return users; } subscribedUsersFile.close(); return users; } } bool addSubscribedUser(String chat_id, String from_name) { JsonObject& users = getSubscribedUsers(); File subscribedUsersFile = SPIFFS.open("/" + subscribed_users_filename, "w+"); if (!subscribedUsersFile) { Serial.println("Failed to open subscribed users file for writing"); //return false; } users.set(chat_id, from_name); users.printTo(subscribedUsersFile); subscribedUsersFile.close(); return true; } bool removeSubscribedUser(String chat_id) { JsonObject& users = getSubscribedUsers(); File subscribedUsersFile = SPIFFS.open("/" + subscribed_users_filename, "w"); if (!subscribedUsersFile) { Serial.println("Failed to open subscribed users file for writing"); return false; } users.remove(chat_id); users.printTo(subscribedUsersFile); subscribedUsersFile.close(); return true; } void sendMessageToAllSubscribedUsers(String message) { int users_processed = 0; JsonObject& users = getSubscribedUsers(); for (JsonObject::iterator it = users.begin(); it != users.end(); ++it) { users_processed++; if (users_processed < messages_limit_per_second) { const char* chat_id = it->key; bot.sendMessage(chat_id, message, ""); } else { delay(bulk_messages_mtbs); users_processed = 0; } } } void alarmLow() { tone(alarm, 1000, 900); delay(3000); tone(alarm, 1000, 900); delay(3000); tone(alarm, 1000, 900); delay(3000); } void alarmHigh() { tone(alarm, 1000, 1200); delay(2000); tone(alarm, 1000, 1200); delay(2000); tone(alarm, 1000, 1200); delay(2000); tone(alarm, 1000, 1200); } void setup() { pinMode(A0, INPUT); //Укажем что порт A0 будет использован на вход //pinMode(SPIN, INPUT); Serial.begin(115200); delay(10); dht.begin(); if (!SPIFFS.begin()) { Serial.println("Failed to mount file system"); return; } // attempt to connect to Wifi network: Serial.print("Connecting Wifi: "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(500); } Serial.println(""); Serial.println("WiFi connected"); Serial.print("IP address: "); Serial.println(WiFi.localIP()); } void loop() { if (millis() > Bot_lasttime + Bot_mtbs) { int numNewMessages = bot.getUpdates(bot.last_message_received + 1); int h = dht.readHumidity(); float t = dht.readTemperature(); int s = analogRead(A0); //int s = digitalRead(SPIN); String smoke = String(((s / 10 - 8) * 3)); String smoke_alarm = "ALARM! Smoke value too high: " + String(s) + " (" + smoke + "%)"; if (s > 300) { sendMessageToAllSubscribedUsers(smoke_alarm); alarmLow(); } else if (s > 420) { sendMessageToAllSubscribedUsers(smoke_alarm); alarmHigh(); } String outputText = "Temperature: " + String(t) + "°C, " + "Humidity: " + h + "%, " + "Smoke: " + String(s) + " (" + smoke + "%)"; Serial.println(outputText); // if (digitalRead(SPIN) == LOW) { // sendMessageToAllSubscribedUsers(smoke_alarm); // alarmHigh(); // } while (numNewMessages) { Serial.println("got response"); handleNewMessages(numNewMessages); for (int i = 0; i < numNewMessages; i++) { bot.sendMessage(bot.messages[i].chat_id, outputText, ""); } numNewMessages = bot.getUpdates(bot.last_message_received + 1); //sendMessageToAllSubscribedUsers(outputText); } Bot_lasttime = millis(); } }
Я решил проблему аналоговых входов ESP8266 практичнее. CD5041BE. Стоят 1,5$ за 10 штук. Просто и надёжно.
Я решил взять готовое решение чтобы оно работало из коробки, чтобы я свой код не менял, а тупо перезалил и все завелось. Но не тут то было( Я читал о свитчах разных, но для меня это слишком сложно и муторно. Отдельное питание, отдельные прошивки, отдельные танцы с бубном.
проблема скорее всего в SPIFFS,
https://se7en.ws/novye-revizii-esp8266-ne-umeyut-pisat-v-eeprom/
Закомментил, не помогло.
Вот что в консоли:
тогда разводку смотрите dhtpin приходит на atmega или esp8266
Я смотрел по картинке с интернета, тоже об этом думал и поэтому после каждой перепрошивки я пробую все цифровые порты) Брутфорс ...
esp pins GPIO2
и в настройках esp в arduino ide поменяйте builtin led 2 на 15
esp pins GPIO2
Извините, не понял, что это значит?
там есть разъем называется esp pins из 12 торчащих выводов
там есть разъем называется esp pins из 12 торчащих выводов
O_O нифига себе!!! СПАСИБО! СРАБОТАЛО! В интернете ни слова о этих пинах. Я думал это для расширения или для модулей (шилдов)
А теперь как мне подключить остальные цифровые выводы? Или можно использовать 5 штук GPIO ?
вы же атмегу не используете вот и смотрите на оставшиеся выводы есп
вы же атмегу не используете вот и смотрите на оставшиеся выводы есп
А как ее использовать? В интернете мануалы были именно вот такие. Ставить джамперы 5/6/7, прошивать, отключать 7 джампер и вуаля.
И подскажите пожалуйста почему у меня по дыму такой разброс значений (считывает аналоговый вход)
В инете смотрел у людей от 0 до 10 паразитные значения при макс. значениях 1024. Я еще никакого датчика не подключил, а значения уже скачут от 50 до 400, это не подходит для датчика воды или дыма. Например мне уже нужна сигнализация когда вода подступит хотя-бы на 1 мм, а аналоговое значение 400 соответсвует 40% от максимума, т.е. 2 сантиметра воды, это вообще капец.
потому-что в воздухе ваш аналоговый пин висит, и считывает наводки, подключите на массу и будет 0 показывать
потому-что в воздухе ваш аналоговый пин висит, и считывает наводки, подключите на массу и будет 0 показывать
А можно с вами пообщаться в телеге или скайпе пожалуйста? +380636072154 / fru2zzy
нет, не раздаю
нет, не раздаю
Хорошо, тогда продолжим тут,
1) я подключил датчик дыма на А0, не видит его. Наверное та-же моя ошибка что и раньше, нужно на ESP выводы цеплять, а там 5 штук GPIO, аналоговых нет.
2) Как мне включить адекватные порты D1-D13 атмеги? джамперы как-то выставить нужно?
2) Как мне включить адекватные порты D1-D13 атмеги? джамперы как-то выставить нужно?
писать код под атмегу и общаться с есп
2) Как мне включить адекватные порты D1-D13 атмеги? джамперы как-то выставить нужно?
писать код под атмегу и общаться с есп
В инете не смог найти ничего для новичков к сожалению. Какие запросы хотя-бы гуглить или как мне перевести мой проект на атмегу и чтобы она отсылала все на есп?
Мда, лучше было за эти деньги купить набор Xiaomi датчиков и не страдать =(
https://yandex.ru/search/?clid=2186618&text=esp%2001%20%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BA%20%D0%B0%D1%80%D0%B4%D1%83%D0%B8%D0%BD%D0%BE&lr=119399&redircnt=1556828561.1
https://yandex.ru/search/?clid=2186618&text=esp%2001%20%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BA%20%D0%B0%D1%80%D0%B4%D1%83%D0%B8%D0%BD%D0%BE&lr=119399&redircnt=1556828561.1
Взял за основу статью https://voltiq.ru/esp8266-and-arduino/
подключил как там сказано, дальше сказано:
Для теста связи попробуйте отправить модулю команду: AT
Я не смог понять как и куда эту команду отправить. Наверное в дебаге как-то, но я не умею.
Провалился в статью, где рассказывают о UART https://voltiq.ru/padi_iot_stamp_uart/
но там сказано что нужны какие-то RS232-UART преобразователи или USB-UART переходники. Мне тоже они нужны?
И еще там не наведен листинг программы. Я не понял как они пересылают информацию