Как с помощью WiFi модуля ESP8266 и радиомодуля MBee-868 собрать интернет шлюз для беспроводной сети

Концепция Интернета вещей все более активно входит в нашу жизнь. Уже сейчас запущены сервисы, позволяющие управлять исполнительными устройствами, выводить данные с датчиков в Интернет, накапливать и отображать их. Но, к сожалению, большинство данных сервисов предполагает отдельное подключение каждого устройства (датчика) к всемирной сети. В видео, представленных ниже, демонстрируется как с помощью WiFi модуля ESP8266 и радиомодуля MBee-868 собрать интернет шлюз для беспроводной сети с практически неограниченным количеством узлов, построенной на радиомодулях MBee-868, вывести данные с них в облако и получить к ним доступ через Интернет с компьютера или смартфона.

Для этого потребуются: модуль ESP8266, макетная плата, модули MBee, конвертор USB-UARTMB-USBridge и набор радиокомпонент. 

В качестве облачного сервиса будет использован ресурс: https://mydevices.com/

Интернет шлюз для беспроводной сети на радиомодулях MBee-868

Как вывести данные с датчика влажности и датчика температуры c модулем MBee 868 на борту в Интернет

Настройка модуля MBee-868 от компании СМК для управляемой розетки

Схемы

SCHlogo.png Схема MB-Gateway в формате *.sch
PDFlogo.png Схема MB-Gateway в формате *.pdf  
Sketch “MBeeCayenneWiFiMonitoringAndManagement”
 
  Скачать MBeeCayenneWiFiMonitoringAndManagement.ino  
/**
    * Скетч предназначен для вывода данных о температуре, измеряемой бортовым датчиком на модуле MBee,
    * и влажности, получаемой модулем MBee с датчика HIH4000, в Cayenne MyDevises, а также, для вкл/выкл электропотребителей.
    * Максимальное число датчиков - 10 шт.
    * Принимающий и передающий модули MBee-868-x.0 работают под управлением ПО Serial Star.
    * **/
   
#include
#include
#include
#include

#define LED 2    //Вывод контрольного светодиода.
#define ACTIVITY_CHECK_PERIOD    3600000     //Период проверик актуальности данных
#define SENSOR_OFF 0
#define SENSOR_ON 1
#define SENSORS_MAX_COUNT 10     //Максимальное число автономных устройств, передающих показания датчиков температуры и влажности

#define CMD_PARAMETER_LEN 1

// WiFi network info.
char ssid[] = "ssid";
char wifiPassword[] = "wifiPassword";

// Cayenne authentication info. This should be obtained from the Cayenne Dashboard.
char username[] = "username";
char password[] = "password";
char clientID[] = "clientID";
const uint16_t sensor[SENSORS_MAX_COUNT] = {0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B};     //Адреса автономных устройств, передающих показания датчиков температуры и влажности

uint8_t flagActivityCheck [SENSORS_MAX_COUNT];

typedef struct
{
    uint8_t sof = 0x7E;
    uint8_t lengthMsb = 0x00;
    uint8_t lengthLsb = 0x08;
    uint8_t frameType = 0x17;
    uint8_t frameID = 0x00;
    uint8_t MSBDestination = 0x00;
    uint8_t LSBDestination = 0x0C;
    uint8_t remoteCommandOptions = 0x0D;
    unsigned char code[2] = {'L','5'};
    uint8_t commandParameter;
    uint8_t checkSum;
}TxFrame_t;

TxFrame_t frame;
SerialStar mbee;
RxIoSampleResponse ioSample;
SimpleTimer timer;
enum
{
    NO_EVENTS,
    ACTUATOR_ON,
    ACTUATOR_OFF
}events = NO_EVENTS;

void setup()
{
    Serial.begin(9600);
    mbee.begin(Serial);
    Cayenne.begin(username, password, clientID, ssid, wifiPassword);
    pinMode(LED, OUTPUT); //Настраиваем вывод контрольного светодиода.
    digitalWrite(LED, HIGH); // turn the LED on (HIGH is the voltage level)
    timer.setInterval(ACTIVITY_CHECK_PERIOD, sensorActivityCheck);
}

void loop()
{
    Cayenne.loop();
    timer.run();

    switch(events)
      {
       case ACTUATOR_ON:
       frame.commandParameter = 0x05;    //Команда установки на L5 высокого уровня.
       frame.checkSum = 0x49;
       sendCommand();
       events = NO_EVENTS;
       break;

    case ACTUATOR_OFF:
       frame.commandParameter = 0x04;     //Переводим L5 в низкий уровень.
       frame.checkSum = 0x4A;
       sendCommand();
       events = NO_EVENTS;
       break;
    default:
       break;
    }
    mbee.readPacket(); //Проверяем, если в буфере пакет.
       if(mbee.getResponse().isAvailable())
    {
       if(mbee.getResponse().getApiId() == IO_DATA_SAMPLE_API_FRAME)    //Является ли принятый пакет, пакетом с данными о состоянии датчиков удаленного модема?
       {

/**********************************************************************************************************/
       mbee.getResponse().getRxIoSampleResponse(ioSample);    //Получаем пакет с данными.

       for(uint8_t i = 0; i < SENSORS_MAX_COUNT; i++)
       {
        if(sensor[i] == ioSample.getRemoteAddress())
          {
             if(ioSample.getTemperature() < 128) //Переводим число из дополнительного кода в прямой.
             {
             Cayenne.celsiusWrite(i, ioSample.getTemperature());
             }
            else
             {
             Cayenne.celsiusWrite(i, 256 - ioSample.getTemperature());
             }
             Cayenne.virtualWrite(i + 10, getHIH4000Humidity(ioSample.getAnalog(1)));
             Cayenne.virtualWrite(i + 20, float(ioSample.getVbatt()) / 51);
             flagActivityCheck[i] = SENSOR_ON;
             }
          }
       }
    }
}

/*Функция пересчета влажности для датчика HIH4000**********************************************/
float getHIH4000Humidity(uint16_t adcData)
{
    float humidity;
    humidity = ((adcData *1.9881158) / 50) - 31.20521173;     //формула расчета влажности для данного датчика: (Vout*2-0.958)/0.0307. Умножаем на 2 из-за делителя на плате. Все остальное из datasheet на датчик     return humidity;
}

/*Функция проверки актуальности данных от датчиков*********************************************/

void sensorActivityCheck(void)
{
    for(uint8_t i = 0; i < SENSORS_MAX_COUNT; i++)
       {
       if(flagActivityCheck[i] == SENSOR_OFF)
       {
           Cayenne.celsiusWrite(i, 0);
           Cayenne.virtualWrite(i + 10, 0);
           Cayenne.virtualWrite(i + 20, 0);
           }
          else
           {
           flagActivityCheck[i] = SENSOR_OFF;
       }
    }
}

//Функция считывания из Cayenne*********************************************
CAYENNE_IN(31)
{
        if(getValue.asInt() == 1)
        {
        events = ACTUATOR_ON;
        }
       else if(getValue.asInt() == 0)
        {
        events = ACTUATOR_OFF;
        }
}

//Функция отправки данных модулю MBee*********************************************
void sendCommand()
{
    Serial.write((uint8_t*)&frame, sizeof(TxFrame_t));
}
Настройки модулей MBee в проекте MBee Cayenne WiFi Remote Control
 
Настройка модуля MBee для шлюза:

    +++     //Вход в командный режим
    ATRE     //Возврат к заводским настройкам
    ATAP 2     //Включение пакетного режима
    ATCN     //Сохранение настроек и перезагрузка


Настройка модуля MBee для автономного датчика:

    +++     //Вход в командный режим
    ATRE     //Возврат к заводским настройкам
    ATAС     //
    ATMY 2     //Устанавливаем собственный адрес устройства
    ATSM 4     //Включаем циклический режим сна
    ATSP 500    //Устанавливаем длительность сна равной 5 сек.
    ATDS 8     //Устанавливаем задержку перед измерением аналоговых датчиков равной 80 мс.
    AT L2 0     //Настраиваем GPIO
    AT L3 0
    AT L4 0
    AT L5 0
    AT R0 2
    AT R1 0
    AT R2 0
    AT R4 0
    AT R612
    AT R8 0
    ATCN     //Сохранение настроек и перезагрузка


Настройка модуля MBee для управляемой розетки:

    +++     //Вход в командный режим
    ATRE     //Возврат к заводским настройкам
    ATAС     //
    ATMY 0xC     //Устанавливаем собственный адрес устройства
    AT L2 0     //НастраиваемGPIO
    AT L3 0
    AT L4 0
    AT R1 0
    AT R2 0
    ATR4 0
    ATR6 0
    ATR8 0
    ATCN     //Сохранение настроек и перезагрузка


Репозиторий

Githublogo.png
GitHub
Прочее

PDFlogo.png
Инструкция по настройке (Instruction for project Monitoring and management with MyDevices)
XLSlogo.png
Specification MB-Gateway-1.1
JPGlogo.png
zelo-ac-dc_scheme2

Сопутствующие товары

MBee-868-2.0-SMA-PLS12.jpg MBee-868-2.0 – Радиомодули большой выходной мощности диапазона 868 МГц, предназначенные для использования в составе систем беспроводной передачи данных и управления.
ArduinoUNO ArduinoUNO – Компьютер размером с ладонь на базе процессора с частотой 16 МГц и памятью 32 кБ.
MB-USBridge MB-USBridge – Конвертер USB-UART. Может быть использован в качестве платформы для соединения радиомодулей MBee с хост-системой.
MB-TAG-1.2-OEM MB-Tag – Устройство предназначено для использования совместно с беспроводными радиомодулями MBee, в качестве узла с автономным (батарейным) питанием.

 

MB-Serial MB-Serial – Конвертер RS-232/485-UART, предназначенный для подключения к компьютеру либо другому устройству радиомодулей MBee.
 
Производитель: Системы, Модули И Компоненты
Наименование
Производитель
Описание Корпус/
Изображение
Цена, руб. Наличие
MBee-868-2.0-SMA-PLS12
MBee-868-2.0-SMA-PLS12
Системы, Модули И Компоненты
Арт.: 1904946 ИНФО PDF RND
Доступно: 17 шт. от: 2690 руб.
Радиомодуль большой выходной мощности диапазона 868 МГц, предназначен для использования в составе систем беспроводной передачи данных и управления, промышленной телеметрии и системах безопасности.
MBee-868-2.0-SMA-PLS12 2690,00 от 2 шт. 2300,00 от 3 шт. 2120,00
17 шт.
(на складе)
MBee-868-2.0-WIRE-SOLDER
MBee-868-2.0-WIRE-SOLDER
Системы, Модули И Компоненты
Арт.: 1904953 ИНФО PDF RND
Доступно: 849 шт. от: 1420 руб.
Радиомодуль выходной мощностью 24 дБ диапазона 868 МГц на основе семейства микросхем CC430 компании Texas Instruments, поддерживает протоколы 6LoWPAN и SimpliciTI.
MBee-868-2.0-WIRE-SOLDER 1420,00 от 3 шт. 1220,00 от 6 шт. 1120,00
847 шт.
(на складе)
2 шт.
(под заказ)
MBee-DUAL-3.3-UFL-SOLDER-1350-UFL
MBee-DUAL-3.3-UFL-SOLDER-1350-UFL
Системы, Модули И Компоненты
Арт.: 2103050 ИНФО PDF RND
Доступно: 969 шт. от: 883 руб.
MBee-DUAL-3.3-UFL-SOLDER-1350-UFL – беспроводной модуль компании «СМК», реализованный на микросхеме CC1350 от компании Texas Instruments. Рабочая частота: 868 МГц и 2400 МГц. Тип установленного антенного разъема: UFL. Монтаж пайкой.
MBee-DUAL-3.3-UFL-SOLDER-1350-UFL 883,00 от 3 шт. 883,00 от 6 шт. 883,00
969 шт.
(на складе)