Ломаем выключатель Itead Sonoff TH


Я люблю заниматься какой нибудь электронной фигней. Хотя в электротехнике я не понимаю практически ничего, да и откровенно говоря, прямыми руками я не обладаю. Просто мне это нравится.

Обзор подобного выключателя уже был здесь: mySKU.me/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 страниц)



Планирую купить +87 Добавить в избранное +49 +95
+
avatar
+2
Хорошее устройство с большими возможностями, сохранил в бортовой журнал.
+
avatar
  • sir0ta
  • 09 мая 2016, 14:57
0
Ммм я чего то не понимаю? Esp стоит порядка 100-200 рублей (в зависимости от версии), добавляем туда корпус (я вот недавно купил с 10-ок корпусов под типа повербанки на 4 аккума, ставим 3, в оставшаеся место dc-dc понижайку, еспешку и прочую ересть. Места мало — купить корпус поболя или меньше банок поставить) где-то рубле 100-150. Понижайки по 25-30 рублей за штуку. реле где-то так же готовые модули, ну пусть 50-70. Итого 500 рублей с возможностью докинуть аккумов и получить автономное устройство. А ну на выходе все возможне ножки esp.
+
avatar
0
Да, очень правильно было бы на одной плате сделать порт(двойная гребенка по 4 дырки) для esp01 (и менять их можно пачками), распаять питание с 220 на 5в(для реле) и 3.3в(для датчиков) на плате и еще вместо обычного реле воткнуть твердотельное реле типа OMRON G3MB-202P, датчики и все разное. Но. Я криворукий. Мне просто тяжело паять на плате такую фигню, если бы это была работа и от этого зависел заработок — легко. Но это просто ненапряжное хобби.
Хороший шаг — заказать у китайцев платы для распайки по своей схеме, но их надо еще создать, научиться работать с софтом.
+
avatar
  • sir0ta
  • 09 мая 2016, 15:50
+1
Я сам редко берусь за сбор целиком с нуля.Для этого нужна большая элементарная база. Проще накупить готовых модулей и юзать их. Вот к примеру я активно юзаю подобный лот aliexpress.com/item/20pcs-5x7-4x6-3x7-2x8-cm-double-Side-Copper-prototype-pcb-Universal-Board-for-Arduino-Free/765383366.html Заказываю уже 3-й. очень удобно. К нему пока хватает 1 заказного такого лота aliexpress.com/item/1x40-Pin-2-54mm-Single-Row-Female-20PCS-Male-Pin-Header-connector-20PCS-All-40pcs/1729662116.html
Вот так вот берешь скажем ардуинку, понижайку, всякие релюшки и прочее уже готовое. Выходит дороже чем запчастями, но этих запчастей надо гору. У меня пока нет стартовой базы. Если ее набирать новую — это тысяч 10-15 надо на кондеры, резюки, диоды и прочее. При чем что-то в smd, что-то навесное, что-то и то и то ну и далее по списку. А тут я собрался переделать радиуправляемую машинку. Надо 2 радиомодуля, 2 ардуинки, 2 переменных резистра желательно долгожителя и с линейной характеристикой. 2 понижайки и так по мечи, то плата заряда лития, то плата управлением двигателя. Потом собирается все на одной плате из лота номер 1 с использованием проводков от витухи и коннекторов из лота номер 2 и все. Выгляит конечно не так как лут, но он грубо говоря мне и не нужен в таком изделии. Все равно по факту это просто развлечение. Игрушка будет убита скорее всего через пару недель об стенку дочкой в попытках научиться ею рулить, я достану все, распаяю и оно будет ждать своего часа, скажем та же дунька и прочеею. А с лутом как быть? 2 часа на разводку, травление, сверление и пайку просто выкинуть?
+
avatar
+3
Не, лутовать тоже лень.
Лучше заказать в китае и подождать недельку. Пока думаю, как сделать это — нужно учиться делать проект.
А сборка на витой паре это как использования макетной платы, как-то ненадежно.
Сам тыркал арудино, но вечно не хватало памяти.
А теперь, когда есть возможность использовать arduino IDE для программинга esp8266, у которого памяти — хоть залейся, можно писать любой быдлокод.
+
avatar
  • sir0ta
  • 09 мая 2016, 16:59
-1
А что не надежного в проводках? Хотя дело Ваше.
+
avatar
  • tklim
  • 09 мая 2016, 18:41
+1
Тут готовое, собранное устройство на 220в. Можно просто взять запустить из коробки, но это не наш метод. Допаять гребенку и подключить уарт — делать можно все что угодно.
Единственный минус серьезный, почему они не поставили два реле?
Кстати, по идее, еще можно сделать несколько перемычек на незапаянном контроллере для 433 и тем самым вывести еще несколько GPIO на гребенку для радиомодуля. Посмотрел схему внимательнее, похоже, не выйдет — радиомодуль фактически эмулирует нажатие кнопки
+
avatar
  • sir0ta
  • 09 мая 2016, 19:19
0
Как конечно устройство ладно. но тут человек же хочет велосипед изобрести при чем на треугольных колесах и с штырем вместо сидушки.
+
avatar
+1
Нет, прошивки достаточно надежные (даже моя работала аптаймом месяц), Есть реле, цель была воткнуть датчик температуры, на выходе — резистор в керамике для обогрева ящика с техникой, стоящего в неотапливаемом техническом помещении. Это можно сделать как прошивкой, так и централизованно через MQTT и OPENHAB. Параллельно можно температуру отправлять на тот же narodmon.ru

Таких же решений дешевле и в сборе — пока нет.
Сам собирал на платочке и esp01 температурный датчик, на них крепил преобразователь 5v-3.3v (питание 5в брал с отдельного блока питания 220в на USB). Много элементов, криво. Хотя работает.
+
avatar
  • sir0ta
  • 10 мая 2016, 09:19
0
Ну криво… у меня проточный водонагреватель стоит в холодном гараже. При -25 замерзает. Начинают сначала краны прихватывать и понеслось. Приходилось ставить маленький обогреватель и каждую ночь его включать, а утром выключать. этой зимой я внутрь колонки помести 100Вт лампочку ильича. Все равно у нее 90% в тепло идет. Ардуинка (есп не было, да и не нужна она), модуль реле, DS18B20 прикручен к одному из кранов. Код в пару строк — если температура ниже 1 градуса — включить реле, если выше 3- выключить реле. Устройство до сих пор включено, как потеплело оно перестало включаться, хотя до сих пор воткнуто в сеть. с 200 на 5в — старая зарядка от нокии. Итого расходы — дунька на 16P (не 32, она тут лишняя) — 70 рублей, модуль реле — 50 рублей. Куски проводов, вилка, патрон и лампочка имелись. Все добро спрятано в старую распаячную коробку. Работоспособность… Т.к. бывает дунька теряет датчик температуры, то если в течении 10 замеров датчик не ответит корректно, то софтварно ребутаем дуньку, если после ребута опять не находим, зажигаем светодиод на 13 пине на дуньке. А так работоспособность вот уже месяце 6 работает, хотя по факту только 2 было видно работу, сейчас светик не горит, но и лампочка не загорается… мы то уже клубнику свою кушать начали.
Конечно 220 тоже не просто так воткнуты в розетку. там же в распаячной коробке висит узо на всякий не предвиденный.
+
avatar
0
Они собрали тут SonOff Dual на два реле. Угу. Воткнули второй процессор, т.к. типа у esp не хватало пинов. Ну, да, у 12й так пинов не хватает! На два реле, два светика, ком и невнятную фигню на нераспаянном порту…
+
avatar
  • mirson
  • 09 мая 2016, 17:02
+3
Такой обзор от того кто
в электротехнике я не понимаю практически ничего
В таком случае я пошел нервно курить…
+
avatar
0
А тут и нет электротехники — напайка одной пятипиновой гребенки не считается.
В основном, это установка софта.
+
avatar
+2
Вот еще немного внутренностей железяк этого производителя — zftlab.org/pages/2016031000.html
Как руки дойдут, может допишу обзорчик.
+
avatar
0
Если хотя-бы каждый десятый россиянин был с такими «кривыми руками», мы бы сейчас на Марсе авторалли устраивали! Автору респект:-)
+
avatar
0
Расскажите, а чем прошивки esp8266 лучше стандартного кода в Ардуино? я в этом новичок, потому и спрашиваю.
+
avatar
0
Ардуино — мало памяти, для получения доступа к сети надо использовать отдельный модуль ethernet или ту же esp8266 для доступа по wifi.
Тут — памяти много, сразу доступ к wifi, очень дешевое. Доступ к wifi, а тогда зачем нам лишняя ардуино?
При наличии развитого сообщества (тут еще не упомянутого nodemcu и lua) любой датчик можно подключить.
+
avatar
0
был тут хороший обзор на плюшку с esp8266 mySKU.me/blog/aliexpress/38586.html, сейчас такую получил и не понимаю зачем что-либо альтернативное шить? стоковая пишется через ардуино и к wi-fi цепляется, глубокий сон тоже вроде есть. Какие плюсы от других прошивок? (только место?)
+
avatar
  • spc
  • 09 мая 2016, 21:59
+1
Изначально недопонимание произошло. У меня ощущение, что zero1632 рассказал про то, чем ESP8266 лучше Arduino (поправьте меня, если ошибаюсь).

А так, с точки зрения среды программирования, то, опять же, насколько я понимаю, минусов Arduino как минимум два: снижение быстродействия и сравнительно большой расход памяти. Грубо говоря, в ESP8266 загружается эмулятор платформы Arduino, чтобы уже затем выполнять соответствующий код.
+
avatar
0
Оно и понятно что esp8266 лучше ардуино.
Тут устройство тоже нормальное — не надо паять питание.
И относительно дешевое.
Я еще два заказал.
+
avatar
+1
Плюха такая у меня тоже есть. Поиграть — да, цеплять датчики к ней сложно.
Плюсы: стабильность и нет необходимости писать свою прошивку. Попробуйте в blynk заставить работать DHT22 и ds18b20, без написания собственного кода, вывода этих переменных в качестве виртуальных и т.д.
Я был реально горд, когда у меня заработал MQTT клиент именно из ардуиновского приложения. Как будто сам эту библиотеку написал :)
А в прошивках голову ломать не надо, все настройки вообще в веб-интерфейсе есть.
Каждому свое.
+
avatar
-1
Ооочнь быстро. я не понял. Что мне сделать с этим прибором чтобы он стал ещё лучше? Если можно, в двух строках.
+
avatar
0
Купить прибор.
Много читать.
Вскрыть припаять гребенку.
Начать прошивать.
+
avatar
+2
Моё продолжение — zftlab.org/pages/2016050900.html
+
avatar
  • edgi
  • 12 мая 2016, 13:31
0
Спасибо. Немного не понятна цель установки передатчика. Управлять розетками где установлен приёмник или что?
+
avatar
+1
Ну, в обычном режиме мы имеем от Sonoff одно управляемое реле через интернет.
При модификации, помимо основной функции, у нас еще открывается возможность управления неограниченным количеством радио-розеток + можно подцепить датчики.
Т.е., по сути, мы превращаем Sonoff в неплохой такой шлюз.
+
avatar
  • Bangkok
  • 23 октября 2018, 15:04
0
Добрый день.
Подскажите плиз. У Sonoff реле с радиоканалом к сожалению маленький радиус действия с пульта.
Если припаять к антене проводок, радиус увеличится? Или как это делается?
Спасибо.
+
avatar
  • alfa2
  • 24 октября 2016, 21:37
0
для прошивки достаточно зажать кнопку и через переходник USB to TTL перепрошить устройство.
у меня не прошивается, замыкаем GPIO0 на землю, сразу прошивается.

если подключить 5В как показано на картинке сразу выгорел диод и стабилизатор, похоже утащив с собой еще что-то.

+
avatar
0
Дык, в обзоре же указано — " в частности, нужно 3.5 вольта."
+
avatar
  • alfa2
  • 14 ноября 2016, 19:27
0
Если подать 3,5 В работать не будет. читайте внимательно.
+
avatar
0
не знаю. Подключал исключительно 3.5 вольта — ничего не горело, все работает как часы.
В том числе один внешний термодатчик ds18b20
если честно не понял, где читать внимательно.
Для перепрошивки нужно зажать gpio0 — то есть повешенную на этот gpio0 кнопку.
+
avatar
  • alfa2
  • 26 ноября 2016, 16:14
0
читать схему, смотреть картинку в статье или мое фото.
если подать 3,5В ничего не сгорит, но и работать не будет, так как далее стоит защитный стабилитрон на 6,2В и далее стабилизатор на 3,3В (вот он и питает всю схему). он хоть и Low Drop но 3,5В ему мало.

а то что вы скорее всего подключали питание 3,5В на разьем 5 штырьков (используемый при программировании), это другая тема.
+
avatar
  • zero1632
  • 02 декабря 2016, 01:26
0
Гм. Я немного не понял, что работать не будет.
Даже при подключении 3.5в к гребенке — работает светодиод, работает реле. Хотя смысла в нем нет. DS18b20 меряет температуру.
Для отладки прошивки — самое оно (у меня на rx/tx выдает сообщения для отладки)

И я честно говоря, не знаю, куда еще надо подключать 3.5 вольта как не к гребенке.
В схемах разбираюсь как свинья в апельсинах.
+
avatar
  • alfa2
  • 06 декабря 2016, 18:52
0
про гребенку я ни слова не упоминал

Разбираться и не надо, смотрим Внимательно на картинку в верху страницы там явно указано куда подключать 5 Вольт
+
avatar
  • zero1632
  • 06 декабря 2016, 19:00
0
(бьюсь головой об стену) ну зачем, зачем, зачем подключать 5 вольт?
+
avatar
  • alfa2
  • 08 декабря 2016, 11:32
0
потому что нет 220В, а есть 12 и 5
+
avatar
  • bulick
  • 13 ноября 2016, 20:20
0
Мой любимый прошивальщик ESP8266Flasher при подаче питания на плату постоянно зависал.А как побороли эту проблему? у меня такая-же самая с pl2303
+
avatar
0
Использую usb3.0 — возможно что-то по питанию не проходило.
Не виснет.
+
avatar
  • SVD
  • 19 ноября 2016, 15:17
0
а что за кнопочка на приёмнике UHF-433?
+
avatar
0
а нет тут приемника 433Мгц.
И чип под него не распаян.
Можно его(приемник) впаять а потом соединить его контакты с gpio14.
Ну и прошивку соответствующую самому написать/использовать wifi-iot
+
avatar
  • SVD
  • 19 ноября 2016, 15:57
0
9 дырочек на плате — это под плату приёмника… они в 2-х исполнениях идут…
+
avatar
  • SVD
  • 19 ноября 2016, 16:07
0
9 дырочек на плате — это под плату приёмника… они в 2-х исполнениях идут…
здесь посмотри....https://mysku.me/blog/china-stores/39547.html

тут полный вариант...Wi-Fi+RF
+
avatar
0
Насколько я знаю, там свой чип управления и сторонние прошивки его не поддерживают.
+
avatar
  • SVD
  • 19 ноября 2016, 16:44
0
он выдаёт параллельный двочный код… в этом 4 бита...D0-D3… о дальше идёт в контроллер управления...8266… через регистр 4-->1
+
avatar
0
blynk2_mqtt.ino:14:25: fatal error: ESP8266Ping.h: No such file or directory
+
avatar
  • zero1632
  • 02 декабря 2016, 00:07
0
Угу.
Я не сильно программер, потому:
Используйте Arduino IDE 1.6.7
В настройках добавьте поддержку esp8266 (описание есть в интернете)
Скачайте из yadi.sk/d/DttT7y4Yzx8aF libraries.rar, распакуйте в директорию Arduino IDE.
Там же, по ссылке, есть обновление прошивки — подправил некоторые неточности.
Библиотеки все из интернета, если есть новее — не заменяйте.
За исключением WidgetTerminal.h из состава blynk — там у них ошибка, которая дает буфер только 32 байта для вывода в терминал, потому я поставил 128.
+
avatar
  • zero1632
  • 02 декабря 2016, 01:21
0
Разрабы blynk ошибку признали, но не исправляют в новых версиях
+
avatar
  • mishava
  • 18 января 2017, 12:42
0
Скажите, по поводу связи с роутером. Если отлючат свет, в итоге роутер перезагрузится, не потеряется ли связь моего смартфона с sonoff и прийдется их заново сопряжать.
+
avatar
0
Нет. Во всех трех прошивках настройки wifi записываются в eeprom(или в специальную файловую систему spiffs). Просто он будет пытаться найти ту точку доступа, что была задана заранее.
Я в своей прошивке жестко забиваю три (можно сколько угодно точек доступа на всякий случай) и еще одну изменяемую сохраняю в eeprom. Если не зацепится за заранее заданную, будет перебирать из имеющихся в прошивке.
+
avatar
0
можешь попробовать прошивку от 1msmart, у них нет обязательной привязки к облачным серверам, могут работать вообще локально (без интернета)
www.youtube.com/channel/UCOvkjygH0Y1_-8h-7hPAEWw тут можно посмотреть обзоры
support.1msmart.com/ — а здесь после регистрации можно саму прошивку скачать
+
avatar
0
Уважаемый автор, скопировал скетч, установил недостающие библиотеки, ардуино Иде ругается на OneWire.h, может, версия не та. Скиньте, пожалуйста, свои версии библиотек
Пишет Please define I/o register types here.
Похожий кейс есть на гитхабе. Пока своим мозжечком не понял
+
avatar
0
С библиотекой разобрался. Увидел вашу ссылку на Я.Д. спасибо!)
Пробовал залить прошивку через ардуино Иде, не вышло. Надежда на есп флешер.
+
avatar
  • zero1632
  • 26 сентября 2019, 22:36
+1
Все перекачивайте ))
Я положил последнюю прошивку (дописывал в 2018), плюс portable версию arduino ide в архиве со всеми бибилиотеками.
Arduino ide просто распаковать, запустить, открыть файл.
Скомпилировать, через меню «экспорт бинарного файла» получить прошивку, ее заливать
Заливать флешером, в режиме qout или dout
Компилируется, заливается, работает
Только что проверил.
Перед компиляцей можно поправить файл wifiscan.ino — там лежат настройки заранее прописанных точек доступа, их можно исправить или удалить.
+
avatar
0
Спасибо большое! )))
Архив немного потолстел, как я понял)
Буду ковыряться. Самому очень интересно, поэтому отпишусь тут
+
avatar
0
Читал, разбирался. Изменил не файл «WiFiscan.ino», его нет в архиве. Изменил переменные «ssidUserDefined», «passUserDefined», «blynkToken» в файле «blynk2_mqtt_v2_81_public.ino», которые, как я понял, передаются в переменные с припиской "_eeprom", и грузятся в энергонезависимую память. Но что-то не работает. Сначала диод на плате горит, после мигает 2 раза, перерыв. К сети не подключается, к облаку блинк соответственно тоже.
Переменные задавал в момент декларирования, т.е. «string ssidUserDefined = „wifiname“;
Не подскажете, правильно ли я делал?
+
avatar
  • zero1632
  • 04 октября 2019, 03:07
0
Видимо надо перекачать архив.
Потому что там 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 жестко прописывать не надо, его надо вносить позже, на странице конфигурации.
Цель прошивки — универсальность, если заранее знать имя и пароль точки доступа, то разврнув сразу несколько реле — можно быстро их обнаружить, настроить и оставить работать. У меня работают если не сказать годами — то месяцами точно.
+
avatar
0
Перекачал. Второй раз, и версия 2.83)
Долго тупит. Не подключался к сети, точка не поднималась, хотя прописал название и пароль своей сети. Потом оставил только 1 вариант перебора сетей свой, без «тест». Всё получилось, а я подумал, что мне не под силу даже это. Думаю ещё поковыряться и попробую прикрутить модуль 433МГц.
В общем, спасибо большое вам! Сэкономили мне тысячи часов, хочется вас отблагодарить, хотя бы скромно. Если кинете реквизиты, то хотя бы на пару новых модулей сонофф кину))
+
avatar
  • zero1632
  • 06 октября 2019, 00:09
0
Во всем разобрались?
Датчик температуры подключали?
Сервис blynk нормально подключили?
Скажу честно — я с публичным blynk сервером не работал, я поднимал свой, там все работает отлично.
Я рад, что кому-то пригодилась моя прошивка.
Так как это чисто хобби, благодарностей кроме спасибо не надо ))
Если что — пишите [email protected]
p.s. я сейчас неспешно ковыряю blitzwolf shp6. Эта такая розетка с энергомонитором. Весьма неплохая по дизайну. Намного интереснее, есть прошивка tasmota под нее, но опять же нет сервисa blynk. Пока что подвисает, на чем — непонятно, но разберемся…
+
avatar
0
Мне кажется, что разобрался в необходимом минимуме))
Датчик температуры не ставил, пока он не нужен.
Блинк нормально работает.
С передатчиком 433 МГц дело отложилось на пару недель, к сожалению. Ваша прошивка реально помогла. Про тасмоту читал, но не стал связываться из-за отсутствия блинка))
Розетка shp6 вещь, прочитал, думаю, что стоит купить по случаю особой щедрости китайцев, например, на распродажах.
За почту спасибо, как что напишу.