Espruino:Примеры/Управление устройствами с помощью Puck.js и SMS

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Управление устройствами с помощью Puck.js и SMS[1]

В видео ниже рассказывается, как использовать Puck.js и GSM-модем для управления устройствами при помощи текстовых SMS-сообщений.

Control Bluetooth Lights with SMS (Puck.js)

Ниже в разделе «Возврат данных о температуре» есть ещё одно видео о том, как считывать данные с находящихся рядом BLE-устройств и отправлять их обратно в виде текстового SMS-сообщения.

Примечание: Для этого прошивку Puck.js нужно обновить как минимум до версии 1v95 (или до самой свежей версии – той, что включает в себя все новейшие функции, но может быть нестабильна). Вот страница, с которой можно загрузить прошивку.

Нам понадобятся

  • Устройство Puck.js (или другая Espruino-плата, если вам не нужен BLE)
  • Модуль SIM800 или SIM900. В моей версии используется входное 5-вольтовое напряжение (если у вас не так, вам нужно будет переподключить контакты соответствующим образом)
  • 3.3-вольтовый регулятор напряжения (LD1117AV33), если не собираетесь использовать батарею Puck.js
  • 5-вольтовый источник напряжения
  • Макетная плата и соединительные провода (если планируете собирать проект так же, как показано на видео)

Подсоединение

Подключите устройства друг к другу следующим образом:

LD1117AV33

Контакт Куда подключить
1 (GND) К любому контакту GND
2 (Вывод) 3V на Puck.js
3 (Ввод) Входное 5-вольтовое напряжение

Puck.js

Контакт Куда подключить
GND К любому контакту GND
3V 3V на Puck.js
D28 RXD на SIM800
D29 TXD на SIM800

SIM800

Контакт Куда подключить
GND К любому контакту GND
5V Входное 5-вольтовое напряжение
RXD D28 на Puck.js
TXD D29 на Puck.js

Код

Управление светодиодом Puck.js при помощи SMS

Bluetooth.setConsole(1);
Serial1.setup(115200, { rx: D29, tx : D28 });
var ATSMS = require("ATSMS");
var sms = new ATSMS(Serial1);

sms.init(function(err) {
  if (err) throw err;
  console.log("Инициализировано!");

  sms.list("ALL", function(err,list) {
    if (err) throw err;
    if (list.length)
      console.log(list);
    else
      console.log("Сообщений нет");
  });

  // И отправляем сообщение:
  //sms.send('+441234567890','Привет мир!', callback)
});

sms.on('message', function(msgIndex) {
  console.log("Получили сообщение #",msgIndex);
  sms.get(msgIndex, function(err, msg) {
    if (err) throw err;
    print("Чтение сообщения", msg);
    var txt = msg.text.toLowerCase();
    if (txt=="on") LED1.set();
    if (txt=="off") LED1.reset();
    // Удаляем все сообщения, чтобы избежать переполнения:
    sms.delete("ALL");
  });
});

Управление BLE-лампочкой Awox

Bluetooth.setConsole(1);
Serial1.setup(115200, { rx: D29, tx : D28 });
var ATSMS = require("ATSMS");
var sms = new ATSMS(Serial1);

sms.init(function(err) {
  if (err) throw err;
  console.log("Инициализировано!");

  sms.list("ALL", function(err,list) {
    if (err) throw err;
    if (list.length)
      console.log(list);
    else
      console.log("Сообщений нет");
  });

  // И отправляем сообщение:
  //sms.send('+441234567890','Привет мир!', callback)
});

sms.on('message', function(msgIndex) {
  console.log("Получили сообщение #",msgIndex);
  sms.get(msgIndex, function(err, msg) {
    if (err) throw err;
    print("Чтение сообщения");
    var txt = msg.text.toLowerCase();
    if (txt=="on") setLight(1);
    if (txt=="off") setLight(0);
    // Удаляем все сообщения, чтобы не допустить переполнения:
    sms.delete("ALL");
  });
});

function setLight(isOn) {
  var gatt;
  NRF.connect("98:7b:f3:61:1c:22").then(function(g) {
    //         ^^^^^^^^^^^^^^^^^  место для адреса лампочки
    gatt = g;
    return gatt.getPrimaryService("33160fb9-5b27-4e70-b0f8-ff411e3ae078");
  }).then(function(service) {
    return service.getCharacteristic("217887f8-0af2-4002-9c05-24c9ecf71600");
  }).then(function(characteristic) {
    return characteristic.writeValue(isOn ? 1 : 0);
  }).then(function() {
    gatt.disconnect();
    console.log("Готово!");
  });
}

Возврат данных о температуре

Using SMS text messages to remotely monitor state (Puck.js)

Вот код Puck.js для отправки данных о температуре:

setInterval(function() {
  NRF.setAdvertising({
    0x1809 : [Math.round(E.getTemperature())]
  });
}, 30000);

А полностью код будет выглядеть вот так:

Bluetooth.setConsole(1);
Serial1.setup(115200, { rx: D29, tx : D28 });
var ATSMS = require("ATSMS");
var sms = new ATSMS(Serial1);

sms.init(function(err) {
  if (err) throw err;
  console.log("Инициализировано!");

  sms.list("ALL", function(err,list) {
    if (err) throw err;
    if (list.length)
      console.log(list);
    else
      console.log("Сообщений нет");
  });

  // И для отправки сообщения:
  //sms.send('+441234567890','Привет мир!', callback)
});

sms.on('message', function(msgIndex) {
  console.log("Получили сообщение #",msgIndex);
  sms.get(msgIndex, function(err, msg) {
    if (err) throw err;
    print("Чтение сообщения", msg);
    var txt = msg.text.toLowerCase();
    if (txt=="on") LED1.set();
    if (txt=="off") LED1.reset();
    if (txt=="get") getTemp(msg.oaddr);
    // Удаляем все сообщения, чтобы не допустить переполнения:
    sms.delete("ALL");
  });
});

function getTemp(number) {
  console.log("Считываем температуру");
  NRF.findDevices(function(devs) {
    devs.forEach(function(dev) {
      if (dev.name=="Puck.js 5736") { // здесь нужно будет задать
                                      // название вашего Puck.js
        console.log("Прочли температуру");
        var message = "Температура: "+dev.serviceData["1809"][0];
        sms.send(number,message, function() {
          print("Текст отправлен!");
        });
      }
    });
  });
}

Где купить

Ссылки, по которым можно купить лампочки Awox, ищите в этом руководстве.

Ссылки на то, где купить SIM900, ищите в соответствующей статье.

Устройства Puck.js можно заказать здесь.

См.также

Внешние ссылки