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

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
(Новая страница: «{{Espruino/Панель перехода}} {{Перевод от Сubewriter}} {{Myagkij-редактор}} =<ref>[ www.espruino.com - ]</ref>= <syntaxhighlight...»)
 
Нет описания правки
 
(не показано 6 промежуточных версий 2 участников)
Строка 3: Строка 3:
{{Myagkij-редактор}}
{{Myagkij-редактор}}


=<ref>[ www.espruino.com - ]</ref>=
=Управление устройствами с помощью Puck.js и SMS<ref>[https://www.espruino.com/Puck.js+SMS www.espruino.com - Puck.js with SMS control]</ref>=


<syntaxhighlight lang="javascript" enclose="div">
В видео ниже рассказывается, как использовать [https://www.espruino.com/Puck.js Puck.js] и GSM-модем для управления устройствами при помощи текстовых SMS-сообщений.
 
[https://www.youtube.com/watch?v=xvX2k5vRkg0&feature=emb_title Control Bluetooth Lights with SMS (Puck.js)]
 
Ниже в разделе [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 Вот страница], с которой можно загрузить прошивку.
 
==Нам понадобятся==
 
* Устройство [https://www.espruino.com/Puck.js Puck.js] (или другая Espruino-плата, если вам не нужен BLE)
* Модуль [https://www.espruino.com/SIM900 SIM800 или SIM900]. В моей версии используется входное 5-вольтовое напряжение (если у вас не так, вам нужно будет переподключить контакты соответствующим образом)
* 3.3-вольтовый регулятор напряжения (LD1117AV33), если не собираетесь использовать батарею Puck.js
* 5-вольтовый источник напряжения
* [https://www.espruino.com/Breadboard Макетная плата] и соединительные провода (если планируете собирать проект так же, как показано на видео)
 
==Подсоединение==
 
Подключите устройства друг к другу следующим образом:
 
=== LD1117AV33 ===
 
{| class="wikitable"
|-
! Контакт !! Куда подключить
|-
| 1 (GND) || К любому контакту GND
|-
| 2 (Вывод) || 3V на Puck.js
|-
| 3 (Ввод) || Входное 5-вольтовое напряжение
|}
 
=== Puck.js ===
 
{| class="wikitable"
|-
! Контакт !! Куда подключить
|-
| GND || К любому контакту GND
|-
| 3V || 3V на Puck.js
|-
| D28 || RXD на SIM800
|-
| D29 || TXD на SIM800
|}
 
=== SIM800 ===
 
{| class="wikitable"
|-
! Контакт !! Куда подключить
|-
| GND || К любому контакту GND
|-
|5V || Входное 5-вольтовое напряжение
|-
| RXD || D28 на Puck.js
|-
| TXD || D29 на Puck.js
|}
 
== Код ==
 
=== Управление светодиодом Puck.js при помощи SMS ===
 
<syntaxhighlight lang="javascript">
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");
  });
});
</syntaxhighlight>
 
=== Управление BLE-лампочкой Awox ===
 
<syntaxhighlight lang="javascript">
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("Готово!");
  });
}
</syntaxhighlight>
 
=== Возврат данных о температуре ===
 
[https://www.youtube.com/watch?v=As2dqUOpEvU&feature=emb_title Using SMS text messages to remotely monitor state (Puck.js)]
 
Вот код [https://www.espruino.com/Puck.js Puck.js] для отправки данных о температуре:
 
<syntaxhighlight lang="javascript">
setInterval(function() {
  NRF.setAdvertising({
    0x1809 : [Math.round(E.getTemperature())]
  });
}, 30000);
</syntaxhighlight>
 
А полностью код будет выглядеть вот так:
 
<syntaxhighlight lang="javascript">
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("Текст отправлен!");
        });
      }
    });
  });
}
</syntaxhighlight>
 
== Где купить ==
 
Ссылки, по которым можно купить лампочки Awox, ищите в [https://www.espruino.com/BLE%20Lightbulbs этом руководстве].
 
Ссылки на то, где купить [[SIM900]], ищите в [https://www.espruino.com/SIM900 соответствующей статье].
 
Устройства [[Puck.js]] можно заказать [https://www.espruino.com/Order#puckjs здесь].


=См.также=
=См.также=


{{ads}}
 


=Внешние ссылки=
=Внешние ссылки=
Строка 15: Строка 247:
<references />
<references />


{{Навигационная таблица/Espruino}}
{{Навигационная таблица/Портал/Espruino}}
{{Навигационная таблица/Телепорт}}

Текущая версия от 15:08, 20 мая 2023

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


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

См.также

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