×

我爱你枕头与MKR WiFi 1010开源分享

消耗积分:0 | 格式:zip | 大小:0.22 MB | 2022-11-02

分享资料个

描述

我们都知道,在你的生活中没有那个特别的人可能会很困难,但是如果你可以通过互联网远程发送爱和感情,只需拥抱一个枕头呢?现在,我们不能真正发送拥抱……但我们可以通过消息应用程序发送一个甜蜜的表情符号,由你给枕头一个拥抱触发。当你拥抱我爱你枕头时,你会听到里面的蜂鸣器发出心跳的声音。根据您拥抱的长度,Telegram Bot 将向您选择的任何聊天发送不同的表情符号。使用这款可拥抱的设备与您所爱的人保持联系!

简而言之

在这个实验中,我们将使用铝箔制作一个 DIY 电容传感器,用于检测拥抱。为了创建我们的拥抱发送设备,我们需要以下组件:

  • 蜂鸣器
  • 铝箔
  • 1个电阻5M欧姆
  • 面包板
  • 电线

学习目标

  • 介绍电报机器人
  • 管理电容式传感器
  • 电报机器人和群聊#ProTips
  • WiFi 最佳实践#ProTips

专业提示是有用但并非绝对必要的步骤,它们会为项目增加一层复杂性。

想知道更多?

本教程是让您熟悉 MKR WiFi 1010 和 IoT 的一系列实验的一部分。所有实验都可以使用 MKR IoT Bundle 中包含的组件构建。

  • 我爱你枕头与 MKR WiFi 1010

介绍电报机器人

Telegram是一款流行的移动和桌面消息传递应用程序。除了让我们与朋友聊天之外,它还允许我们创建方便且强大的聊天机器人!

聊天机器人只不过是您可以与之聊天的联系人,而是它背后的人,有一台机器可以相应地回复您编写的代码。

Arduino的 TelegramBot 库为我们提供了一种简单的方法来实现聊天机器人背后的逻辑。

创建你的机器人

创建一个机器人是如此简单!只需按照这几个简单的步骤或在此处查看文档

 
 
 
 
poYBAGNgvZyAVc0mAABmDF6Wh7I70.jpeg
 
1 / 5第 1 步 - 寻找 BotFather
 

设置董事会

首先确保我们拥有所有需要的库。这是我们需要的所有库的列表:

  • WiFi妮娜
  • 电报机器人
  • ArduinoJson
  • 电容式传感器

您可以按照这个简单的指南轻松安装它们

为了使用 Telegram 的 API,我们首先需要在 MKR WiFi 1010 上上传证书。这适用于大多数在线服务和 API!

从 WiFiNINA 库上传固件更新程序示例并将 api.telegram.org 添加域。这些是要遵循的步骤:

  • 运行IDE;
  • 上传草图`Example->WiFiNINA->tools->Firmware updater`
  • 在工具中打开`WiFi101/WiFiNINA 固件更新程序`
  • 点击“添加域”
  • 单击“将证书上传到 WiFi 模块”
  • 上传你的草图`

让魔法发生!

打开 TelegramBot 库中的 EchoBot 示例,填写您的 WiFi 凭据和您从 BotFather 收到的 API 令牌并上传!

> 示例 > TelegramBot > EchoBot

您刚刚创建了一个回显所有消息的机器人。

EchoBot 和表情符号

表情符号无处不在!我们将用它们来传递我们的爱和拥抱。使用 EchoBot 示例是查看机器人如何读取您的表情符号的简单方法。

 
poYBAGNgvZ6AdEjsAABMESmIcmU662.png
向 Bot 发送表情符号,看看编码后的等价物是什么
 

不幸的是,机器人接收表情符号的方式与发送它们的方式不同。为了发送表情符号,我们需要使用UNICODE字符。

例如,要发送一个心形表情符号,我们将使用: \U00002764

您可以在此处查看unicode 表情符号代码的完整列表为了创建一个用另一个心脏表情符号回复心脏表情符号的机器人,我们将使用如下代码:

void loop() {
 message m = bot.getUpdates(); // Read new messages
 if ( m.chat_id != 0 ) { // Check if there are some updates
   Serial.println(m.text); // print the message received
   if (m.text == "u2764ufe0f") { //check if it received an heart emoji
     bot.sendMessage(m.chat_id, "\U00002764");
     // Reply to the same chat with the heart emoji
   }
 }
}

结果将是:

 
pYYBAGNgvaCAczESAABIHvC7i7Y756.png
用另一个心形表情符号回复心形表情符号
 

电容式传感器

Telegram 够了,让我们开始构建我们的 DIY 电容式传感器吧!

CapacitiveSensor库两个或多个 Arduino 引脚变成一个电容传感器,可以感应人体的电容。

传感器设置所需的只是一个中值到高值的电阻器和一块铝箔。

在最敏感的情况下,传感器将开始感应距离传感器几英寸的手或身体,并通过不同种类的材料我们将把传感器藏在枕头里!

上传示例草图,连接电线并在控制台上查看结果:

#include 
CapacitiveSensor   foil = CapacitiveSensor(5, 4);
// 10M resistor between pins 5 & 4, pin 4 is sensor pin, add a wire and or foil
void setup()
{
 foil.set_CS_AutocaL_Millis(0xFFFFFFFF);     // turn off autocalibrate
 Serial.begin(9600);
}
void loop()
{
 long start = millis();
 long sensor_value =  foil.capacitiveSensor(30);
 Serial.print(millis() - start);        // check on performance in milliseconds
 Serial.print("\t");                    // tab character for debug windown spacing
 Serial.print(sensor_value);            // print sensor output
 Serial.println("\t");                    // print sensor output 3
 delay(500);                             // arbitrary delay to limit data to serial port
}

接线和结果

 
poYBAGNgvayAOnWkAAEHK4bvptY190.jpg
在控制台上查看值
 

我们将sensor_value用作检测拥抱的阈值!

心跳

拥抱的时间越长,听到的心跳声就越多。心跳越多,您发送的爱就越多(以及不同的表情符号)。

我们将使用蜂鸣器和几行简单的代码来模拟心跳的声音。

int Buzzer = 8; // Pin attached to the buzzer
void setup() {}
void loop() {
 HeartBeat();
 delay(1000);
}
void HeartBeat() {
 tone(Buzzer, 31, 200); // tone(Pin, Note, Duration);
 delay(200);
 tone(Buzzer, 31, 400);
 delay(200);
 noTone(Buzzer);
 delay(1000);
} 

要更复杂地使用蜂鸣器和音调功能,请查看下拉菜单示例并查找 Digital > ToneMelody

#ProTip:聊天 ID 和群聊

为了发送消息,机器人需要一个聊天 ID。聊天 id 是某人和机器人之间聊天的唯一标识符。为了让机器人向特定的人发送消息,您首先需要该人向机器人发送短信并保存该特定聊天的聊天 ID。

在这个项目中,机器人只会回复最后一个发短信的人,不管那是谁。

机器人是公开的,每个人都可以给机器人发短信!

如果您想将机器人包含在群聊中,您需要禁用隐私模式以允许机器人阅读所有消息,否则它将只能检测以开头的命令/:

 
 
 
 
pYYBAGNgva6Af_YrAABo4r-NVok639.png
 
1 / 3使用 /mybot 命令向@BotFather 发送文本,然后选择您的机器人和机器人设置
 

#ProTip:WiFi 最佳实践

WiFi 可能很棘手。有时它只是关闭几秒钟,显然没有任何理由。这对您的 Arduino 来说可能是个问题,因为大多数时候我们只在草图的开头运行 WiFi 连接功能。

在线服务也可能很棘手,当 Arduino 向服务器(在本例中为 Telegram)发送请求时,它会等待回复。由于数百个原因,回复可能无法到达,使 Arduino 处于无限循环中。

为了让你的项目更稳定,你可以添加一个看门狗。看门狗是一个必须定期更新的计时器,否则它将重新启动威廉希尔官方网站 板。

您可以使用这两个库向您的项目添加看门狗:

EchoBot 示例将如下所示:

#include <WiFi101.h>
#include <SPI.h>
#include <TelegramBot.h>
#include <Adafruit_SleepyDog.h>
// Initialize Wifi connection to the router
char ssid[] = "xxxx";             // your network SSID (name)
char pass[] = "yyyy";           // your network key
// Initialize Telegram BOT
const char BotToken[] = "xxxx";
WiFiSSLClient client;
TelegramBot bot (BotToken, client);
void setup() {
 Serial.begin(115200);
 while (!Serial) {}
 delay(3000);
 // attempt to connect to Wifi network:
 Serial.print("Connecting Wifi: ");
 Serial.println(ssid);
 while (WiFi.begin(ssid, pass) != WL_CONNECTED) {
   Serial.print(".");
   delay(500);
 }
 Serial.println("");
 Serial.println("WiFi connected");
 bot.begin();
 Watchdog.enable(10000); // set the timer to 10 sec
}
void loop() {
 Watchdog.reset(); // if this function is not called within 10 seconds the board will reset itself
 message m = bot.getUpdates(); // Read new messages
 if ( m.chat_id != 0 ) { // Checks if there are some updates
   Serial.println(m.text);
   bot.sendMessage(m.chat_id, m.text);  // Reply to the same chat with the same text
 } else {
   Serial.println("no new message");
 }
}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'我爱你枕头与MKR WiFi 1010开源分享',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);