Я люблю заниматься какой нибудь электронной фигней. Хотя в электротехнике я не понимаю практически ничего, да и откровенно говоря, прямыми руками я не обладаю. Просто мне это нравится.
Обзор подобного выключателя уже был здесь:
mysku.club/blog/china-stores/39547.html, у обозреваемого мной отсутствует радиомодуль на 433 МГц, но это был осознанный выбор — он мне и не нужен. Ниже-разбор устройства, его перепрошивка в альтернативные прошивки и первый шаг к умному дому.
Продавец хороший, отправил быстро, через 2 дня после оплаты и я забрал посылку на почте через 14 дней.
Распаковку не заснял, но внутри находилась обычная коробка из грубого картона, достаточно тонкая. Никаких дисков, инструкций и прочего хлама не было.
Что внутри устройства:
А там именно то, что и хотелось бы покрутить и на что уже сделано куча прошивок: wifi модуль ESP8266 а также флеш-память winbond 25q80dvsig c 1 мегабайтом памяти.
Само устройство открывается легко, крышка держится на защелках.
на фото виден нераспаянный разъем на 5 пинов, туда я чуть позже впаял гребенку, есть такие же, но на 4 pin:
Мне повезло и у меня оказался не просто Sonoff itead, а Sonoff TH, c возможностью подключиться к пятому пину, на который разведен GPIO, и на который предполагается повесить датчик DHT22
Я уже знал, для чего мне это устройство, поэтому с базовой прошивкой я даже не заморачивался.
Я впаял гребенку:
После некоторых консультаций на канале flymon.slack.com мне рассказали, что для прошивки достаточно зажать кнопку и через
переходник USB to TTL перепрошить устройство.
При перепрошивке не следует подключать 220, вас может ненароком долбануть током! Лучше использовать питание с usb2ttl конвертера, в частности, нужно 3.5 вольта.
Тут я столкнулся с проблемой. Мой любимый прошивальщик ESP8266Flasher при подаче питания на плату постоянно зависал. Не знаю, с чем это было связано, но алгоритм действий таков: подаем питание на устройство через usb2ttl конвертер, при этом держим кнопку зажатой с самого начала. Только потом запускаем прошивальщик, выставляем размер памяти 1 Мб:
Что же, теперь по поводу прошивок. Есть множество прошивок для esp8266.
Я лично знаю две хорошие(забегая вперед скажу, что одна из них платная), плюс можно написать прошивку самому и использовать облачные технологии.
Моей целью было использовать MQTT сервер, а в частности, включать — выключать нагрузку по моему желанию и правилам.
Реально живих GPIO две штуки — 12 и 13, одна включает реле, вторая — зеленую лампу на устройстве.
Номер еще одного GPIO, к которому можно подключить датчик температуры, я пока не выяснил, но с учетом нижеописанной прошивки, проблем в этом я не вижу.
Итак, первая называется wifi-iot и находится здесь:
wifi-iot.com/
Обладает огромным количеством функций, более того, так как функций много — не все они помещаются в прошивку — можно выбрать свои функции и опции (работа с разными датчиками, автообновление прошивки «по воздуху», работа с внешними экранами и тд) и скомпилировать свою прошивку. Большая часть функций платная — работает только в Pro режиме (лицензия стоит 110р или 2 USD) Эту прошивку я и поставил — она самая легкая для начинающих. Есть два вида интерфейса, я загрузил последний:
Датчики температуры я не присоединял, хотя при впайке гребенки прозвонил все контакты, не думаю, что будет какая-то проблема. Более того, думаю, что при наличии одного свободного GPIO его можно использовать как коммутатор для еще одного, внешнего реле, типа такого:
MQTT клиент там есть и отлично работает:
И отлично принимается запущенным на другой машине Mosquitto:
Вторая прошивка это ESPEasy:
www.esp8266.nu/index.php/ESPEasy
Полностью бесплатная, но несколько упрощенная.
(скриншоты взяты с прошивки, установленной на другой плате esp8266, однако и на Sonoff я ее ставил, главное выбрать опцию — памяти 1 Мб)
MQTT клиент работает, но все не так однозначно, как в первой прошивке, нужно разбираться (в том числе и мне):
Так и не получилось выдавать на MQTT состояние GPIO (например для управления реле), такое ощущение, что есть огромное количество поддерживаемых датчиков и сенсоров, которые выдаются в MQTT, а вот управление нагрузкой придется делать через HTTP, что для использования совместно с OPENHUB не слишком удобно.
Ну и наконец, третья прошивка, облачные технологии, Это Blynk.
www.blynk.cc/
Тут — разгул для творчества. Как я и писал раньше, я далеко не программист, однако с помощью Arduino IDE можно создать прошивку, которая будет использовать облако Blynk (а можно и ваш локальный сервер blynk), обладать хорошим визуальными опциями и т.д. Есть и минусы — прошивку придется пилить самому, а если устройств много — у Blynk придется покупать возможность добавить новые функции. Более того, большинство переменных (номер ID устройства в системе blynk, реальные gpio, адрес вашего email для сообщений, название и пароль точки и доступа вписан прямо в прошивку, если делать это настраиваемым — сильное усложенение кода)
Итак, как выглядит прошивка, тестируемая на
другом esp8266, но работающая постоянно(и я не вижу проблем допилить ее, если точно знать номера работающих GPIO).
Так как я не люблю сервисы, зависящие не от меня, большим плюсом было то, что разработчики blynk сделали возможность запускать сервер локально на машине.
Итак, прошивка осуществляется либо из Arduino IDE, либо все тем же прошивальщиком ESP8266Flasher(надо выбрать опцию сохранить прошивку полностью, а потом прошить ее, начиная с адреса 0x00000).
Прошивка писалась для двух реле, и одного датчика ds18b20. Что-то одно можно выкинуть. :)
Но самое главное — это одновременно работающий MQTT клиент с сервисом Blynk.
Не только постит в MQTT, но и отслеживает изменение значений, и все это нормально изменяется в клиенте blynk на мобильном
Внизу много кода, возможно не очень хорошего
//#define BLYNK_PRINT Serial // Comment this out to disable prints and save space
//#define BLYNK_DEBUG
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
#include <SPI.h>
#include <OneWire.h>
#include <DallasTemperature.h>
//#include <TimeLib.h>
//#include <EEPROM.h>
#include <PubSubClient.h>
// Go to the Project Settings (nut icon).
char auth[] = «ваш ID в системе blynk»;
// Keep this flag not to re-sync on every reconnection
bool isFirstConnect = true;
SimpleTimer timer;
WidgetTerminal terminal(V4);
#define Pin 0// pin DATA ds18b20
// MQTT client init
#define DEVICE_TYPE «ESP8266Test»
const char* mqtt_server = «192.168.1.81»;
long lastReconnectAttempt = 0;
// MQTT server init
WiFiClient espClient;
PubSubClient MQTTClienet(espClient);
//long lastMsg = 0;
//char msg[50];
//int value = 0;
String CurrentMAC = WiFi.macAddress();
//--------------------------/
// DS18B20
OneWire ourWire(Pin);
DallasTemperature sensors(&ourWire);
//--------------------------/
void uptimeSendToTerminal()
{
long days=0;
long hours=0;
long mins=0;
long secs=0;
secs = millis()/1000; //convect milliseconds to seconds
mins=secs/60; //convert seconds to minutes
hours=mins/60; //convert minutes to hours
days=hours/24; //convert hours to days
secs=secs-(mins*60); //subtract the coverted seconds to minutes in order to display 59 secs max
mins=mins-(hours*60); //subtract the coverted minutes to hours in order to display 59 minutes max
hours=hours-(days*24); //subtract the coverted hours to days in order to display 23 hours max
terminal.print(«Uptime: „);
terminal.print(days);
terminal.print(“ days „);
terminal.print(hours);
terminal.print(“ hours „);
terminal.print(mins);
terminal.print(“ mins „);
terminal.print(secs);
terminal.println(“ secs»);
terminal.flush();
}
void callback(char* topic, byte* payload, unsigned int length) {
terminal.print(«Message arrived [»);
terminal.print(topic);
terminal.print("] ");
for (int i = 0; i < length; i++) { terminal.print((char)payload[i]); }
terminal.println();
// Switch on the LED if an 1 was received as first character
if ((char)payload[0] == '1' && strcmp(topic,«relay1Set»)) { digitalWrite(1, HIGH); } else if ((char)payload[0] == '0' && strcmp(topic,«relay1Set»)) { digitalWrite(1, LOW); }
if ((char)payload[0] == '1' && strcmp(topic,«relay2Set»)) { digitalWrite(3, HIGH); } else if ((char)payload[0] == '0' && strcmp(topic,«relay2Set»)) { digitalWrite(3, LOW); }
}
void SetBlynkButtonStatus() {
if (digitalRead(1)== 0) { Blynk.virtualWrite(V10,LOW); }
else { Blynk.virtualWrite(V10,HIGH); }
if (digitalRead(3)== 0) { Blynk.virtualWrite(V11,LOW); }
else { Blynk.virtualWrite(V11,HIGH); }
MQTTClienet.loop(); // Client connected
terminal.flush();
}
void GetTemperatureFromSensor() { //вызов раз в 30 секунд
sensors.requestTemperatures();
Blynk.virtualWrite(3, sensors.getTempCByIndex(0));
//mqtt
if (!MQTTClienet.connected()) {
terminal.println(«Trying to connect to MQTT server»);
if (MQTTClienet.connect(DEVICE_TYPE)) { terminal.println(«Successful MQTT server connection»); MQTTClienet.subscribe(«relay1Set»); MQTTClienet.subscribe(«relay2Set»);}
}
else {
// MQTTClienet.loop(); // Client connected
String TempSensorDS18b20 = String (sensors.getTempCByIndex(0));
MQTTClienet.publish(«temp1»,(char*) TempSensorDS18b20.c_str());
if (digitalRead(1)==0) { MQTTClienet.publish(«relay1Status»,«0»); } else { MQTTClienet.publish(«relay1Status»,«1»); }
if (digitalRead(3)==0) { MQTTClienet.publish(«relay3Status»,«0»); } else { MQTTClienet.publish(«relay3Status»,«1»); }
}
}
void setup()
{
//pinMode(0, OUTPUT);
//pinMode(2, OUTPUT);
pinMode(1, OUTPUT);
pinMode(3, OUTPUT);
//Serial.begin(9600);
WiFi.mode(WIFI_STA);
WiFi.hostname(«ESP001Test»);
Blynk.begin(auth,«ваша точка доступа», «ваш пароль»,IPAddress( ваш адрес blynk ),8442);
while (Blynk.connect() == false) {
// Wait until connected
}
sensors.begin();
delay(10);
//MQTT client
MQTTClienet.setServer(mqtt_server, 1883);
MQTTClienet.setCallback(callback);
timer.setInterval(600000L, uptimeSendToTerminal);
timer.setInterval(30000, GetTemperatureFromSensor);
timer.setInterval(3000, SetBlynkButtonStatus);
}
BLYNK_CONNECTED()
{
if (isFirstConnect) {
Blynk.syncAll();
isFirstConnect = false;
}
Blynk.email(" ваш email ", «ESP8266», «Your device is online.»);
//Blynk.notify(«ESP8266 started»);
terminal.print(«Blynk v»);
terminal.println(BLYNK_VERSION);
terminal.println(«Device started»);
terminal.flush();
}
BLYNK_WRITE(V4)
{
if (String(«uptime») == param.asStr()) {
uptimeSendToTerminal();
}
else if (String(«temp») == param.asStr()) {
// Вынесенно в отдельный таймер
//sensors.requestTemperatures();
//Blynk.virtualWrite(3, sensors.getTempCByIndex(0));
//
terminal.print(«Temp: „);
terminal.print(sensors.getTempCByIndex(0));
terminal.println(“ C»);
Blynk.virtualWrite(3, sensors.getTempCByIndex(0));
}
else if (String(«help») == param.asStr()) { terminal.println(«Help: type about/temp/uptime/info/status»); }
else if (String(«about») == param.asStr()) {terminal.println(«blynk & mqtt, 2016»); }
else if (String(«info») == param.asStr()) {
terminal.print(«MAC ADDR: „);
terminal.println(CurrentMAC);
terminal.print(“Free mem: „);
terminal.println(ESP.getFreeHeap());
terminal.print(“Chip ID: „);
terminal.println(ESP.getFlashChipId());
terminal.print(“Chip size: „);
terminal.println(ESP.getFlashChipSize());
terminal.print(“Chip speed: „);
terminal.println(ESP.getFlashChipSpeed());
}
else if (String(“status») == param.asStr()) {
if (MQTTClienet.connected()) {terminal.println(«Connected to MQTT server»);}
else { terminal.print(«NOT connected to MQTT server, reason:»); terminal.println(MQTTClienet.state()); }
if (digitalRead(1)== 0) { terminal.println(«Led 1 is OFF»); }
else { terminal.println(«Led 1 is ON»); }
if (digitalRead(3)== 0) { terminal.println(«Led 3 is OFF»); }
else { terminal.println(«Led 3 is ON»); }
int rssi = WiFi.RSSI();
terminal.print(«Signal strength: „);
terminal.print(rssi);
terminal.println(“dBm»);
}
else {
// Send it back
terminal.print(«Unknown command:»);
terminal.write(param.getBuffer(), param.getLength());
terminal.println();
}
// Ensure everything is sent
terminal.flush();
}
BLYNK_READ(V3) // Widget in the app READs Virtal Pin V3 with the certain frequency
{
//sensors.requestTemperatures();
Blynk.virtualWrite(3, sensors.getTempCByIndex(0));
}
BLYNK_READ(V5) // Widget in the app READs Virtal Pin V5 with the certain frequency
{
// This command writes Arduino's uptime in seconds to Virtual Pin V5
Blynk.virtualWrite(5, millis() / 1000);
}
BLYNK_WRITE(V10)
{
//int invertedButtonValue = param.asInt()? HIGH: LOW;
//digitalWrite(1, invertedButtonValue);
digitalWrite(1,!digitalRead(1));
delay (500);
if (digitalRead(1)== 0) { terminal.println(«Led 1 is OFF»); }
else { terminal.println(«Led 1 is ON»); }
}
BLYNK_WRITE(V11)
{
//int invertedButtonValue = param.asInt()? HIGH: LOW;
//digitalWrite(3, invertedButtonValue);
digitalWrite(3,!digitalRead(3));
delay (500);
if (digitalRead(3)== 0) { terminal.println(«Led 3 is OFF»); }
else { terminal.println(«Led 3 is ON»); }
}
void loop()
{
//blynk
Blynk.run();
timer.run(); // Initiates SimpleTimer
delay(500);
}
Следующий шаг — это корректная настройка OPENHAB сервера, настройка его работы совместно с MQTT сервером, настройка графиков и логики. Тема для отдельной большой статьи и наверное, не здесь(тем более что и мне еще разбираться и разбираться).
Устройство к покупке рекомендую. Неплохое реле-нет нужды сильно распаивать или заказывать отдельные платы у китайцев.
upd: Все работает, rx и tx это 1 и 3 GPIO (хотя их и не рекомендуют использовать — они системные)
На пятом пине — GPIO 14
Есть еще опция откусить зеленый светодиод — это GPIO 13 и использовать этот GPIO для температурного датчика (один фиг, светодиод обычно не нужен).
Суммарно можно повесить еще пару реле и кучу датчиков на i2c.
DHT22 висит на 14 GPIO:
p.s. устройство покупалось как всегда, за свои.
p.p.s (13.11.2016) сляпал свою прошивку с Web -интерфейсом. Основная проблема была в том, что прошивка wifi-iot всем подходила, но не было поддержки blynk сервера.
Если кто-то будет пользоваться, за быдлокод не ругать, «пианист играет как умеет»©.
Логика прошивки:
1. Запускается, сканирует все имеющиеся в округе точки доступа
2. Если есть точка доступа, записанная в EEPROM, пытаемся к ней подцепиться.
3. Если не получается- пытаемся подцепиться последовательно к уже заложенным в прошивку точкам с заложенным паролем (у меня все точки начинаются на tesla)
4. Если не получается — поднимаем точку доступа с паролем 12345678. Если в процессе теряется точка доступа — пытаемся пересканировать опять же, подцепиться из имеющихся либо в EEPROM, либо в самой прошивке. Точку доступа не поднимает (хотя наверное стоило бы — одновременно).
5. Чтобы не работал blynk сервер — не надо вписывать его BlynkID в web интерфейсе.
6. Чтобы не работал mqtt сервер — не надо вписывать его адрес в web интерфейсе.
7. Чтобы не работал ping check (проверка доступности устройстава по icmp)- не надо вписывать его ip адрес(да, и понимает он только ip адрес в настройках)
8. Пока не работает отправка логов по UDP, в планах также реализация бота на Telegram (upd. 06.01.2017) Телеграм бота не будет — не хватает памяти для его работы, как я не крутился — либо все описанные функции (http, blynk, mqtt) либо телеграм бот.
9. Все настройки читаются из EEPROM в самом начале. То есть поменяли что-то — надо записать в EERPOM и ПОТОМ ПЕРЕЗАГРУЗИТЬСЯ(!!!)
10. Если к 14 пину подключен ds18b20 — будет выводить его температуру в web интерфейс, в mqtt и blynk (температуру -в виртуальный пин V3, логи в терминал V4, кнопка включения-выключения реле — V10). Подсказка- с помощью blynk можно делать логику, например в зависимости от температуры.
11. Есть возможность обновления по http сгенеренной прошивкой из например IDE.
12. После первого запуска ОЧЕНЬ рекомендуется очистить EEPROM (можно даже напрямую вызвать
ip_адрес_sonoff/eraseeeprom )
13. есть отправка на Narodmon.ru (отключается)
15. Состояние светодиода соответстствует состоянию реле. Можно выключить/включить реле через однократное нажатие кнопки(от 50 мс до 3 сек)
16. если дать кнопку больше(от 3 до 6 сек), светодиод моргнет 1 раз — очистка eeprom
от 6 до 10 сек — светодиод моргнет 2 раза — перезагрузка
выше 10 сек — светодиод моргнет 3 раза — очистка eeprom и перезагрузка
Если кому-то не сможется, могу скомпилировать для вас прошивку с вашими настройками. Пишите в ЛС.
Ссылка на скетч для Arduino IDE:
yadi.sk/d/DttT7y4Yzx8aF (для компиляции использовалась Arduino IDE 1.6.7 и библиотеки из libraries.rar )
Скриншоты морды (очень минималистично, пришлось параллельно изучать основы html страниц)
Хороший шаг — заказать у китайцев платы для распайки по своей схеме, но их надо еще создать, научиться работать с софтом.
Вот так вот берешь скажем ардуинку, понижайку, всякие релюшки и прочее уже готовое. Выходит дороже чем запчастями, но этих запчастей надо гору. У меня пока нет стартовой базы. Если ее набирать новую — это тысяч 10-15 надо на кондеры, резюки, диоды и прочее. При чем что-то в smd, что-то навесное, что-то и то и то ну и далее по списку. А тут я собрался переделать радиуправляемую машинку. Надо 2 радиомодуля, 2 ардуинки, 2 переменных резистра желательно долгожителя и с линейной характеристикой. 2 понижайки и так по мечи, то плата заряда лития, то плата управлением двигателя. Потом собирается все на одной плате из лота номер 1 с использованием проводков от витухи и коннекторов из лота номер 2 и все. Выгляит конечно не так как лут, но он грубо говоря мне и не нужен в таком изделии. Все равно по факту это просто развлечение. Игрушка будет убита скорее всего через пару недель об стенку дочкой в попытках научиться ею рулить, я достану все, распаяю и оно будет ждать своего часа, скажем та же дунька и прочеею. А с лутом как быть? 2 часа на разводку, травление, сверление и пайку просто выкинуть?
Лучше заказать в китае и подождать недельку. Пока думаю, как сделать это — нужно учиться делать проект.
А сборка на витой паре это как использования макетной платы, как-то ненадежно.
Сам тыркал арудино, но вечно не хватало памяти.
А теперь, когда есть возможность использовать arduino IDE для программинга esp8266, у которого памяти — хоть залейся, можно писать любой быдлокод.
Единственный минус серьезный, почему они не поставили два реле?
Кстати, по идее, еще можно сделать несколько перемычек на незапаянном контроллере для 433 и тем самым вывести еще несколько GPIO на гребенку для радиомодуля.Посмотрел схему внимательнее, похоже, не выйдет — радиомодуль фактически эмулирует нажатие кнопкиТаких же решений дешевле и в сборе — пока нет.
Сам собирал на платочке и esp01 температурный датчик, на них крепил преобразователь 5v-3.3v (питание 5в брал с отдельного блока питания 220в на USB). Много элементов, криво. Хотя работает.
Конечно 220 тоже не просто так воткнуты в розетку. там же в распаячной коробке висит узо на всякий не предвиденный.
В таком случае я пошел нервно курить…
В основном, это установка софта.
Как руки дойдут, может допишу обзорчик.
Тут — памяти много, сразу доступ к wifi, очень дешевое. Доступ к wifi, а тогда зачем нам лишняя ардуино?
При наличии развитого сообщества (тут еще не упомянутого nodemcu и lua) любой датчик можно подключить.
А так, с точки зрения среды программирования, то, опять же, насколько я понимаю, минусов Arduino как минимум два: снижение быстродействия и сравнительно большой расход памяти. Грубо говоря, в ESP8266 загружается эмулятор платформы Arduino, чтобы уже затем выполнять соответствующий код.
Тут устройство тоже нормальное — не надо паять питание.
И относительно дешевое.
Я еще два заказал.
Плюсы: стабильность и нет необходимости писать свою прошивку. Попробуйте в blynk заставить работать DHT22 и ds18b20, без написания собственного кода, вывода этих переменных в качестве виртуальных и т.д.
Я был реально горд, когда у меня заработал MQTT клиент именно из ардуиновского приложения. Как будто сам эту библиотеку написал :)
А в прошивках голову ломать не надо, все настройки вообще в веб-интерфейсе есть.
Каждому свое.
Много читать.
Вскрыть припаять гребенку.
Начать прошивать.
При модификации, помимо основной функции, у нас еще открывается возможность управления неограниченным количеством радио-розеток + можно подцепить датчики.
Т.е., по сути, мы превращаем Sonoff в неплохой такой шлюз.
Подскажите плиз. У Sonoff реле с радиоканалом к сожалению маленький радиус действия с пульта.
Если припаять к антене проводок, радиус увеличится? Или как это делается?
Спасибо.
если подключить 5В как показано на картинке сразу выгорел диод и стабилизатор, похоже утащив с собой еще что-то.
В том числе один внешний термодатчик ds18b20
если честно не понял, где читать внимательно.
Для перепрошивки нужно зажать gpio0 — то есть повешенную на этот gpio0 кнопку.
если подать 3,5В ничего не сгорит, но и работать не будет, так как далее стоит защитный стабилитрон на 6,2В и далее стабилизатор на 3,3В (вот он и питает всю схему). он хоть и Low Drop но 3,5В ему мало.
а то что вы скорее всего подключали питание 3,5В на разьем 5 штырьков (используемый при программировании), это другая тема.
Даже при подключении 3.5в к гребенке — работает светодиод, работает реле. Хотя смысла в нем нет. DS18b20 меряет температуру.
Для отладки прошивки — самое оно (у меня на rx/tx выдает сообщения для отладки)
И я честно говоря, не знаю, куда еще надо подключать 3.5 вольта как не к гребенке.
В схемах разбираюсь как свинья в апельсинах.
Разбираться и не надо, смотрим Внимательно на картинку в верху страницы там явно указано куда подключать 5 Вольт
Не виснет.
И чип под него не распаян.
Можно его(приемник) впаять а потом соединить его контакты с gpio14.
Ну и прошивку соответствующую самому написать/использовать wifi-iot
здесь посмотри....https://pluspda.ru/blog/china-stores/39547.html
тут полный вариант...Wi-Fi+RF
Я не сильно программер, потому:
Используйте Arduino IDE 1.6.7
В настройках добавьте поддержку esp8266 (описание есть в интернете)
Скачайте из yadi.sk/d/DttT7y4Yzx8aF libraries.rar, распакуйте в директорию Arduino IDE.
Там же, по ссылке, есть обновление прошивки — подправил некоторые неточности.
Библиотеки все из интернета, если есть новее — не заменяйте.
За исключением WidgetTerminal.h из состава blynk — там у них ошибка, которая дает буфер только 32 байта для вывода в терминал, потому я поставил 128.
Я в своей прошивке жестко забиваю три (можно сколько угодно точек доступа на всякий случай) и еще одну изменяемую сохраняю в eeprom. Если не зацепится за заранее заданную, будет перебирать из имеющихся в прошивке.
www.youtube.com/channel/UCOvkjygH0Y1_-8h-7hPAEWw тут можно посмотреть обзоры
support.1msmart.com/ — а здесь после регистрации можно саму прошивку скачать
Пишет Please define I/o register types here.
Похожий кейс есть на гитхабе. Пока своим мозжечком не понял
Пробовал залить прошивку через ардуино Иде, не вышло. Надежда на есп флешер.
Я положил последнюю прошивку (дописывал в 2018), плюс portable версию arduino ide в архиве со всеми бибилиотеками.
Arduino ide просто распаковать, запустить, открыть файл.
Скомпилировать, через меню «экспорт бинарного файла» получить прошивку, ее заливать
Заливать флешером, в режиме qout или dout
Компилируется, заливается, работает
Только что проверил.
Перед компиляцей можно поправить файл wifiscan.ino — там лежат настройки заранее прописанных точек доступа, их можно исправить или удалить.
Архив немного потолстел, как я понял)
Буду ковыряться. Самому очень интересно, поэтому отпишусь тут
Переменные задавал в момент декларирования, т.е. «string ssidUserDefined = „wifiname“;
Не подскажете, правильно ли я делал?
Потому что там blynk2_mqtt_v2_83.ino как минимум разница в версиях, и есть wifiscan.ino
Там в описаниях все описано.
Логика работы простая — может быть несколько заданных заранее точек доступа с паролями, к ним реле пытается присоединиться после загрузки (и конечно, если теряет сеть, к которой уже подключилась — также ищет их — 42 строка файла wifiscan.ino)
Если нет — то светодиод моргает 2 раза, поднимает свою точку доступа, которая называется SONOFF[mac] и имеет пароль 123456781 (изменяется в 61 строке)
Соответственно, надо подключиться к точке доступа, зайти на 192.168.4.1 (точка выдаст адрес автоматически), вести ssid, пароль для wifi. Не забыть нажать применить и обязательно — нажать ссылку записать в eeprom (вначале у вас в eeprom будет вообще каша), потом перезагрузиться.
Когда реле будет подключено — светодиод моргает один раз (если реле включено — светодиод инвертирован, но моргает также).
Точку доступа можно также обнаружить в сетевом окружении после появлении в локальной сети как ssdp устройство (чтобы не искать его ip)
blynkToken жестко прописывать не надо, его надо вносить позже, на странице конфигурации.
Цель прошивки — универсальность, если заранее знать имя и пароль точки доступа, то разврнув сразу несколько реле — можно быстро их обнаружить, настроить и оставить работать. У меня работают если не сказать годами — то месяцами точно.
Долго тупит. Не подключался к сети, точка не поднималась, хотя прописал название и пароль своей сети. Потом оставил только 1 вариант перебора сетей свой, без «тест». Всё получилось, а я подумал, что мне не под силу даже это. Думаю ещё поковыряться и попробую прикрутить модуль 433МГц.
В общем, спасибо большое вам! Сэкономили мне тысячи часов, хочется вас отблагодарить, хотя бы скромно. Если кинете реквизиты, то хотя бы на пару новых модулей сонофф кину))
Датчик температуры подключали?
Сервис blynk нормально подключили?
Скажу честно — я с публичным blynk сервером не работал, я поднимал свой, там все работает отлично.
Я рад, что кому-то пригодилась моя прошивка.
Так как это чисто хобби, благодарностей кроме спасибо не надо ))
Если что — пишите [email protected]
p.s. я сейчас неспешно ковыряю blitzwolf shp6. Эта такая розетка с энергомонитором. Весьма неплохая по дизайну. Намного интереснее, есть прошивка tasmota под нее, но опять же нет сервисa blynk. Пока что подвисает, на чем — непонятно, но разберемся…
Датчик температуры не ставил, пока он не нужен.
Блинк нормально работает.
С передатчиком 433 МГц дело отложилось на пару недель, к сожалению. Ваша прошивка реально помогла. Про тасмоту читал, но не стал связываться из-за отсутствия блинка))
Розетка shp6 вещь, прочитал, думаю, что стоит купить по случаю особой щедрости китайцев, например, на распродажах.
За почту спасибо, как что напишу.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.