Espruino:Примеры/Управление устройствами с помощью Puck.js и SMS: различия между версиями
Myagkij (обсуждение | вклад) (Новая страница: «{{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" | В видео ниже рассказывается, как использовать [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 здесь]. | |||
=См.также= | =См.также= | ||
=Внешние ссылки= | =Внешние ссылки= | ||
Строка 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 можно заказать здесь.
См.также
Внешние ссылки