Апрель 3

Трехфазный wi-fi счетчик (DDS6619-016/017 sinotimer RS485 -> tx/rx -> modbus -> sonoff basic ->majordomo)

Итак нам понадобится 3 фазы 4 провода RS485 Modbus 380V 100A din-рейку счетчик энергии цифровой подсветка мощность факторный монитор с дисплеем напряжения тока

TTL к RS485 Модуль UART порт конвертер Модуль

2/3/5/6/8/10 шт Sonoff основной умный дом Wifi переключатель беспроводной пульт дистанционного управления выключатель света таймер DIY модули 10А/2200 Вт через Ewelink

качаем последнюю версию прошивки Tasmota

и меняем в ней 2 вещи
убираем в файле my_user_config.h «//» перед
#define USE_SDM630
далее в файле
модифицируем строку разбора данных
на
const uint16_t sdm630_start_addresses[] {
0x0000, // L1 - SDM630_VOLTAGE [V]
0x0002, // L2 - SDM630_VOLTAGE [V]
0x0004, // L3 - SDM630_VOLTAGE [V]
0x0008, // L1 - SDM630_CURRENT [A]
0x000A, // L2 - SDM630_CURRENT [A]
0x000C, // L3 - SDM630_CURRENT [A]
0x0012, // L1 - SDM630_POWER [W]
0x0014, // L2 - SDM630_POWER [W]
0x0016, // L3 - SDM630_POWER [W]
0x001A, // L1 - SDM630_REACTIVE_POWER [VAR]
0x001C, // L2 - SDM630_REACTIVE_POWER [VAR]
0x001E, // L3 - SDM630_REACTIVE_POWER [VAR]
0x002A, // L1 - SDM630_POWER_FACTOR
0x002C, // L2 - SDM630_POWER_FACTOR
0x002E, // L3 - SDM630_POWER_FACTOR
0x0100 // Total - SDM630_TOTAL_ACTIVE_ENERGY [Wh]
};

далее длинным нажатие на set заходим в изменения пароля в счетчике — длинным нажатием и сохраняем кнопкой turn переходим далее
где выставляем следующее
адрес 001
скорость 9600
и тип на none (тут интересно так как тип может ввести в заблуждение)
далее подключаете TTL к RS485 к пинам rx->rx tx->gpio14
далее в настройках модуля прописываем

и вуаля

 

по факту можно заморочиться и создать шаблон, а можно даже попросить добавить новое оборудование, но на сколько я понял по тасмота там пошли другим путем и предлагают универсальный модуль для всех счетчиков — но настроить через него у меня не получилось а вряд ли у меня появится счетчик SDM630

Апрель 11

Nano V3.0 I/O & Wireless Shield +ESP8266 + Sonoff-Tasmota

Дополнительное питание позволяет использовать шильд для датчиков газа, + возможность навешать дополнительные реле на плату в том числе мы получаем аналоговые пины.

ESP8266 — прошиты Sonoff-Tasmota
ESP8266 -подключен через шильд Nano V3.0 I/O & Wireless Shield
Nano V3.0 — получает команды от Sonoff-Tasmota и публикует через него же данные по mqtt
ВНОНОНС — Все уже реализовано пишите вопросы легче будет отвечать

Август 13

CC2541 перепрошить в HM-10 + Антена

после перепрошивки по данной инструкции стал работать через чат «ble chat» перестал отвечать на АТ команды оказалось что нужно удалить в терминале окончание строки

как результат сканирование находит BLE маяки на основании

Радиомодуль nRF24L01+ 2.4 ГГц

Mi band 2

подключатся не пробовал  мне собственно пока и не надо

прошивал на свой страх и риск два модуля  по инструкции

 

Bluetooth 4.0 для Arduino Android IOS HM-10 BLE CC2540 CC2541 

 

о котором собственно видео

и который отвечал на еще меньшее количество АТ команд и тоже не сканировал устройства

AT+VERSION MLT-BT05-V4.1

но после сравнения визуального двух модулей я все же рискнул и прошил

🙂

так как мой телефон спокойно ловит маячки на основании nRF24L01+ через две стены и три двери

 

 

то я решил усилить свои  уже HM-10 внешними антеннами

 

 

 

Апрель 15

Arduino это круто! — Радиомодуль nRF24L01+ 2.4 ГГц

как оказалось 433 давольно таки слабоват чтоб пробить 3 стены. но отказываться от него не будем так как одна из плат приемника все таки  может получать данные и с третей комнаты, и датчики подают сильный сигнал. но для связи розеток  и управлением светом  решено воспользоваться 2.4ГГц очень хороший мануальчик с описаниями я нашел сдесь спасибо автору завтра получу партия радиомодулей дабы не потерять в закладках статью скопирую сюда пару примеров.

Первый пример, передача данных с аналогового входа.:

#include
#include
#include // https://github.com/maniacbug/RF24

const uint64_t pipe = 0xF0F1F2F3F4LL; // индитификатор передачи, "труба"

RF24 radio(9, 10); // CE, CSN

void setup(){
Serial.begin(9600);

radio.begin();
delay(2);
radio.setChannel(9); // канал (0-127)

// скорость, RF24_250KBPS, RF24_1MBPS или RF24_2MBPS
// RF24_250KBPS на nRF24L01 (без +) неработает.
// меньше скорость, выше чувствительность приемника.
radio.setDataRate(RF24_1MBPS);

// мощьность передатчика RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM,
radio.setPALevel(RF24_PA_HIGH);

radio.openReadingPipe(1,pipe); // открываем первую трубу с индитификатором "pipe"
radio.startListening(); // включаем приемник, начинаем слушать трубу
}

// radio.stopListening(); // останавливает приём (нужно перед началом передачи)

void loop()
{
int data;

if (radio.available()){ // проверяем не пришло ли чего в буфер.
radio.read(&data, sizeof(data)); // читаем данные, указываем сколько байт читать

Serial.print("data: ");
Serial.println(data);
}
}
------------------------------------------------------------------------------
#include
#include
#include // https://github.com/maniacbug/RF24

const uint64_t pipe = 0xF0F1F2F3F4LL; // индитификатор передачи, "труба"

RF24 radio(9, 10); // CE, CSN

void setup(){
Serial.begin(9600);

radio.begin();
delay(2);
radio.setChannel(9); // канал (0-127)

// скорость, RF24_250KBPS, RF24_1MBPS или RF24_2MBPS
// RF24_250KBPS на nRF24L01 (без +) неработает.
// меньше скорость, выше чувствительность приемника.
radio.setDataRate(RF24_1MBPS);

// мощьность передатчика, RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM,
radio.setPALevel(RF24_PA_HIGH);

radio.openWritingPipe(pipe); // открываем трубу на передачу.
}

void loop()
{

int data = analogRead(0); // читаем значение

radio.write(&data, sizeof(data)); // отправляем данные и указываем сколько байт пакет

Serial.print("data: ");
Serial.println(data);

// delay(1000);
}

Второй пример, передача данных с DHT11.:

#include 
#include 
#include  // https://github.com/maniacbug/RF24

#include 
  
const uint64_t pipe = 0xF0F1F2F3F4LL; // индитификатор передачи, "труба"
 
dht11 sensor;
RF24 radio(9, 10); // CE, CSN
 
void setup(){
  Serial.begin(9600);
  
  radio.begin();
  delay(2);
  radio.setChannel(9); // канал (0-127)
    
    // скорость, RF24_250KBPS, RF24_1MBPS или RF24_2MBPS
    // RF24_250KBPS на nRF24L01 (без +) неработает.
    // меньше скорость, выше чувствительность приемника.
  radio.setDataRate(RF24_1MBPS); 
   
    // мощьность передатчика, RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM,
  radio.setPALevel(RF24_PA_HIGH);   

  radio.openWritingPipe(pipe); // открываем трубу на передачу.
  delay(1000);
} 


void loop()   
{
  int data[2];   
  
  sensor.read(8);
  
  data[0] = int(sensor.temperature); // заполняем массив
  data[1] = int(sensor.humidity);
  
  radio.write(&data, sizeof(data)); // отправляем данные и указываем сколько байт пакет
  
  Serial.print("Humidity (%): ");
  Serial.println(data[1]);

  Serial.print("Temperature (oC): ");
  Serial.println(data[0]);
  delay(1000);
} 
-------------------------------------------------------------------------------
#include 
#include 
#include  // https://github.com/maniacbug/RF24

const uint64_t pipe = 0xF0F1F2F3F4LL; // индитификатор передачи, "труба"

RF24 radio(9, 10); // CE, CSN

void setup(){
  Serial.begin(9600);
  
  radio.begin();  
  delay(2);
  radio.setChannel(9); // канал (0-127)
  
    // скорость, RF24_250KBPS, RF24_1MBPS или RF24_2MBPS
    // RF24_250KBPS на nRF24L01 (без +) неработает.
    // меньше скорость, выше чувствительность приемника.
  radio.setDataRate(RF24_1MBPS);     
  
    // мощьность передатчика RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM,
  radio.setPALevel(RF24_PA_HIGH);   
    
  radio.openReadingPipe(1,pipe); // открываем первую трубу с индитификатором "pipe"
  radio.startListening(); // включаем приемник, начинаем слушать трубу
}
 
//  radio.stopListening(); // останавливает приём (нужно перед началом передачи) 


void loop()   
{
  int data[2];
  
  if (radio.available()){ // проверяем не пришло ли чего в буфер.
    radio.read(&data, sizeof(data)); // читаем данные и указываем сколько байт читать
    
      Serial.print("Humidity (%): ");
      Serial.println(data[1]);
      Serial.print("Temperature (oC): ");
      Serial.println(data[0]);
 
    } 
} 


Третий пример, передача данных с DHT11 по запросу.:

#include 
#include 
#include  // https://github.com/maniacbug/RF24

const uint64_t pipe = 0xF0F1F2F3F4LL; // индитификатор передачи, "труба"

RF24 radio(9, 10); // CE, CSN

void setup(){
  Serial.begin(9600);
  
  radio.begin();  
  delay(2);
  radio.setChannel(9); // канал (0-127)
  
    // скорость, RF24_250KBPS, RF24_1MBPS или RF24_2MBPS
    // RF24_250KBPS на nRF24L01 (без +) неработает.
    // меньше скорость, выше чувствительность приемника.
  radio.setDataRate(RF24_1MBPS);     
  
    // мощьность передатчика RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM,
  radio.setPALevel(RF24_PA_HIGH);   
    
  radio.openReadingPipe(1,pipe); // открываем первую трубу с индитификатором "pipe"
  radio.startListening(); // включаем приемник, начинаем слушать трубу
}
 
//  
// для ПроМини

void loop()   
{
  int data[2];

  if (Serial.available() > 0){ // если чтото пришло в сериал
    int val = Serial.parseInt(); // читаем в переменную
    if (val == 1){ // если это 1
      radio.stopListening(); // останавливает приём (нужно перед началом передачи) 
      radio.openWritingPipe(pipe); // открываем трубу на передачу.
      radio.write(&val, sizeof(val)); // отправляем val и указываем сколько байт пакет
      radio.startListening(); // включаем приемник, начинаем слушать трубу
    }
    Serial.flush(); // очищаем буфер  
  }
  
  if (radio.available()){ // проверяем не пришло ли чего в буфер.
    radio.read(&data, sizeof(data)); // читаем данные и указываем сколько байт читать
    
      Serial.print("Humidity (%): ");
      Serial.println(data[1]);
      Serial.print("Temperature (oC): ");
      Serial.println(data[0]); 
    } 
    
} 
---------------------------------------------------------------------------------
#include 
#include 
#include  // https://github.com/maniacbug/RF24

#include 
  
const uint64_t pipe = 0xF0F1F2F3F4LL; // индитификатор передачи, "труба"
 
dht11 sensor;
RF24 radio(9, 10); // CE, CSN
 
void setup(){
//  Serial.begin(9600);
  
  radio.begin();
  delay(2);
  radio.setChannel(9); // канал (0-127)
    
    // скорость, RF24_250KBPS, RF24_1MBPS или RF24_2MBPS
    // RF24_250KBPS на nRF24L01 (без +) неработает.
    // меньше скорость, выше чувствительность приемника.
  radio.setDataRate(RF24_1MBPS); 
   
    // мощьность передатчика, RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM,
  radio.setPALevel(RF24_PA_HIGH);   
  
  radio.openReadingPipe(1,pipe); // открываем первую трубу с индитификатором "pipe"
  radio.startListening(); // включаем приемник, начинаем слушать трубу

//  radio.openWritingPipe(pipe); // открываем трубу на передачу.

} 

////// для UNO
void loop()   
{
  int data[2];   
  
  if (radio.available()){ // проверяем не пришло ли чего в буфер.
    int val;
    radio.read(&val, sizeof(val)); // читаем данные и указываем сколько байт читать
    
    if (val == 1){ // если пришло 1,
      radio.stopListening(); // останавливает приём (нужно перед началом передачи) 
      
      sensor.read(8);  // читаем градусник
      delay(1000);
      data[0] = int(sensor.temperature); // заполняем массив
      data[1] = int(sensor.humidity);
      
         //отправляем данные      
      radio.openWritingPipe(pipe); // открываем трубу на передачу.
      radio.write(&data, sizeof(data)); // отправляем данные и указываем сколько байт пакет
      radio.startListening(); // включаем приемник, начинаем слушать трубу
    }
  }   
} 


 

Март 28

Arduino — Это курто: 433 Датчики и пульты от GSM сигнализации ARDUINO

Сначала я скачал несколько библиотек которые не дали мне ровным счётом ничего, прочитал немного форумов которые рассказали о страшном кодирование таких датчиков через кодер декодер pt2262 \ pt2272 я уже начал подыскивать приемник передатчик с этой микросхемой, но все же залез в внутрь сигнализации я не обнаружил данные чипы хоть инструкция уверяла меня что они есть в ZC-GSM012 и вот мои успехи, все заработало без дополнительного железа.

итак

библиотека rcswitch   прямо внутри есть примеры которые помогут как считать коды так и отправить

для считывания используем ReceiveDemo_Simple

/*
  Simple example for receiving
  
  http://code.google.com/p/rc-switch/
*/

#include 

RCSwitch mySwitch = RCSwitch();

void setup() {
  Serial.begin(9600);
  mySwitch.enableReceive(0);  // Receiver on inerrupt 0 => that is pin #2
}

void loop() {
  if (mySwitch.available()) {
    
    int value = mySwitch.getReceivedValue();
    
    if (value == 0) {
      Serial.print("Unknown encoding");
    } else {
      Serial.print("Received ");
      Serial.print( mySwitch.getReceivedValue() );
      Serial.print(" / ");
      Serial.print( mySwitch.getReceivedBitlength() );
      Serial.print("bit ");
      Serial.print("Protocol: ");
      Serial.println( mySwitch.getReceivedProtocol() );
    }

    mySwitch.resetAvailable();
  }
}

в мониторе мы увидим

Received 1******4 / 24bit Protocol: 1

при нажатии на кнопки пультов и на срабатывание датчиков.

с помощью

SendDemo

#include 

RCSwitch mySwitch = RCSwitch();

void setup() {

  Serial.begin(9600);
  
  // Transmitter is connected to Arduino Pin #10  
  mySwitch.enableTransmit(10);

  // Optional set pulse length.
  // mySwitch.setPulseLength(320);
  
  // Optional set protocol (default is 1, will work for most outlets)
  // mySwitch.setProtocol(2);
  
  // Optional set number of transmission repetitions.
  // mySwitch.setRepeatTransmit(15);
  
}

void loop() {



  mySwitch.send(1******4, 24); // сигналка выключена
  delay(1000);  



  delay(20000);
}

mySwitch.send(1******4, 24);

это строка в которую мы добавили код кнопки.

ЖЕЛЕЗО

сама плата Arduino UNO  (клон) 10$

Радиоудлинитель 433Мгц 2$

пару строк и вы как минимум можете считывать датчики и управлять сигнализацией с ПК

 

 

Март 27

#include

Подключал библиотеку #include <DHT.h>  -подводные камни, лучше библиотеку добавлять в папку программы а не в пользовательскую папку библиотек и даже не через добавить в меню программы,

ну и добавляем через <>  а не «» как написано в самом  примере.

Март 26

Arduino UNO в Ubuntu 14.04 (не активен пункт Последовательный порт)

Arduino UNO подключение к ноутбуку (Украл отсюда)

находим устройство командой

# dmesg

 

[ 444.861592] usb 2-1.2: new full-speed USB device number 6 using ehci-pci
[ 444.957711] usb 2-1.2: New USB device found, idVendor=2341, idProduct=0043
[ 444.957719] usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=220
[ 444.957723] usb 2-1.2: Manufacturer: Arduino (www.arduino.cc)
[ 444.957726] usb 2-1.2: SerialNumber: 85***********080
[ 444.958476] cdc_acm 2-1.2:1.0: ttyACM0: USB ACM device

Даем доступ всем желающим

ls -la /dev/ttyACM0
sudo chmod a+rw /dev/ttyACM0
и вперед к первым миганием Диодов \ Маяк готов 🙂
Вот и мне пришлось сделать первые шаги в электронике, после разочарование умным домом Xiaomi,
решил делать все своими руками   arduino, 433Mhz датчики, в конечном итоге старенький комп с UBUNTU и google API распознаванием голоса.
Одним словом будет интересно.