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

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Нет описания правки
Нет описания правки
Строка 9: Строка 9:
[https://www.youtube.com/watch?v=xvX2k5vRkg0&feature=emb_title Control Bluetooth Lights with SMS (Puck.js)]
[https://www.youtube.com/watch?v=xvX2k5vRkg0&feature=emb_title Control Bluetooth Lights with SMS (Puck.js)]


Ниже в разделе «Возврат данных о температуре» есть ещё одно видео о том, как считывать данные с находящихся рядом BLE-устройств и отправлять их обратно в виде текстового SMS-сообщения.
Ниже в разделе [http://wikihandbk.com/wiki/Espruino:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B/%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%81%D1%82%D1%80%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0%D0%BC%D0%B8_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_Puck.js_%D0%B8_SMS#.D0.92.D0.BE.D0.B7.D0.B2.D1.80.D0.B0.D1.82_.D0.B4.D0.B0.D0.BD.D0.BD.D1.8B.D1.85_.D0.BE_.D1.82.D0.B5.D0.BC.D0.BF.D0.B5.D1.80.D0.B0.D1.82.D1.83.D1.80.D0.B5 «Возврат данных о температуре»] есть ещё одно видео о том, как считывать данные с находящихся рядом BLE-устройств и отправлять их обратно в виде текстового SMS-сообщения.
Примечание: Для этого прошивку Puck.js нужно обновить как минимум до версии 1v95 (или до самой свежей версии – той, что включает в себя все новейшие функции, но может быть нестабильна). [http://www.espruino.com/Download Вот страница], с которой можно загрузить прошивку.
 
'''Примечание:''' Для этого прошивку [[Puck.js]] нужно обновить как минимум до версии 1v95 (или до самой свежей версии – той, что включает в себя все новейшие функции, но может быть нестабильна). [http://www.espruino.com/Download Вот страница], с которой можно загрузить прошивку.


==Нам понадобятся==
==Нам понадобятся==
Строка 26: Строка 27:
=== LD1117AV33 ===
=== LD1117AV33 ===


Контакт
{| class="wikitable" style="margin: 0 auto"
Куда подключить
|-
1 (GND)
! Контакт !! Куда подключить
К любому контакту GND
|-
2 (Вывод)
| 1 (GND) || К любому контакту GND
3V на Puck.js
|-
3 (Ввод)
| 2 (Вывод) || 3V на Puck.js
Входное 5-вольтовое напряжение
|-
| 3 (Ввод) || Входное 5-вольтовое напряжение
|}


=== Puck.js ===
=== Puck.js ===


Контакт
{| class="wikitable" style="margin: 0 auto"
Куда подключить
|-
GND
! Контакт !! Куда подключить
К любому контакту GND
|-
3V
| GND || К любому контакту GND
3V на Puck.js
|-
D28
| 3V || 3V на Puck.js
RXD на SIM800
|-
D29
| D28 || RXD на SIM800
TXD на SIM800
|-
| D29 || TXD на SIM800
|}


=== SIM800 ===
=== SIM800 ===


Контакт
{| class="wikitable" style="margin: 0 auto"
Куда подключить
|-
GND
! Контакт !! Куда подключить
К любому контакту GND
|-
5V
| GND || К любому контакту GND
Входное 5-вольтовое напряжение
|-
RXD
|5V || Входное 5-вольтовое напряжение
D28 на Puck.js
|-
TXD
| RXD || D28 на Puck.js
D29 на Puck.js
|-
| TXD || D29 на Puck.js
|}


== Код ==
== Код ==

Версия от 23:34, 27 марта 2021

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


Управление устройствами с помощью 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 можно заказать здесь.

См.также

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