Новый радиомодуль nooLite MT1132, управляемый через интерфейс UART

Представляем вам новое устройство nooLite - радио-модуль MT1132 (32 канала). Он выполнен в виде печатной платы, которую можно, например, подключить к Arduino или использовать в собственных устройствах.

Управление модулем осуществляется через последовательный интерфейс UART. Полученные команды модуль передает на силовые блоки, используя встроенный радиопередатчик. С более подробной информацией о модуле MT1132 можно ознакомиться по адресу http://www.noo.com.by/assets/files/PDF/MT1132.pdf.

На данный момент модуль MT1132 существует только в виде инженерных образцов. Производство и продажа модуля MT1132 должны начаться в ближайшем будущем.

Один из инженерных образцов попал к нам. Ниже приведен получившийся у нас скетч для Arduino, который можно использовать как пример работы с модулем MT1132. При нажатии на кнопку, подключенную к выходу D2, происходит включение/выключение силового блока, привязанного ко 2 каналу радио-модуля.

#include <SoftwareSerial.h>

int PIN_RX  = 5;  // RX PIN (connect to TX on noolite controller)
int PIN_TX  = 6;  // TX PIN (connect to RX on noolite controller)
int PIN_BTN = 2;  // BTN PIN

byte CHANNEL = 2;
boolean state = LOW;
boolean btnState;

SoftwareSerial mySerial(PIN_RX, PIN_TX); // RX, TX

void setup() {                

  pinMode(PIN_BTN, INPUT);
  mySerial.begin(9600);
}

void on()
{
  sendCommand(CHANNEL, 2);
}

void off()
{
  sendCommand(CHANNEL, 0);
}

void bind()
{
  sendCommand(CHANNEL, 15);
}

void sendCommand(byte channel, byte command)
{
  byte buf[12];
 
  for(byte i = 0; i < 12; i++) {
    buf[i] = 0;
  }
 
  buf[0] = 85;
  buf[1] = B01010000;
  buf[2] = command;
  buf[5] = channel;
 
  int checkSum = 0;
  for(byte i = 0; i < 10; i++) {
    checkSum+= buf[i];
  }
  buf[10] = lowByte(checkSum);
  buf[11] = 170;
 
  for(byte i=0;i<(12);i++)
  {
    mySerial.write(buf[i]);
  }
}

void loop(){

  btnState = digitalRead(PIN_BTN);

  if (btnState == HIGH) {    

    delay(100);
    btnState = digitalRead(PIN_BTN);
    
    if (btnState == HIGH)
    {
      state = !state;
      
      if (state)
      {
        on();
      }
      else
      {
        off();
      }

      while (digitalRead(PIN_BTN))
      {
        delay(100);
      }
    }
  }
}