自定义工作台报failed to fetch(如何用Link Develop开发一个智能厕所)

概述

由于阿里云男女比例的悬殊和厕所面积的限制,每个男同胞每天都要等待一个被特殊风味包围的有限坑位空间。我们在想,能不能利用物联网技术做一个低成本的解决方案,让男同胞不用亲自去现场就能知道坑(像停车场)的空情况,基于我们物联网事业部的一站式开发平台——Link Develop打造一个物联网智能厕所。

自定义工作台

技术架构



前期准备

五金器具

NodeMCU x9,PIR传感器x9,1800mAh LiPo电池x9,防水盒x9,usb迷你线x1

软件

Arduino设计助手

平台

阿里云账号,链接开发平台权限启用。

具体实施

建立设备模型

设备模型可以理解为一个类或一个模板。它指定了某些设备的公共属性,并允许您批量实例化设备。





进入Link Develop平台,和其他云产品一样,需要先完成基本的入门信息。



接下来,我们将进入一个项目空页面,我们需要点击页面顶部的“新建设备型号”。打开设备型号的弹出窗口,输入名称,定义类别。在这里,我们可以选择“自定义类型”。然后进入设备型号详情页面后,添加标准功能——输入红外——选择红外探测状态。我们已经完成了一个可以报告红外探测数据的设备模型。这种模式已经满足了我们的需求。



然后,我们需要实例化我们的卫生间监控设备,并在设备型号详细信息页面中单击“测试设备”选项卡。然后依次创建9个不同deviceName的测试设备。每个设备建立后都有一个ProductKey、DeviceName和DeviceSecret,我们简称为“triple”,后面会用到这个。



完成这些步骤后,设备模型的建立和实例化就可以了。接下来,我们进入Arduino代码编写。

硬件开发

PIR只有三个港口,即VCC、GND和输出港。接线方法如下(NodeMCU的D7相当于arduino中的13针)



然后连接usb线。打开arduino IDE。复制以下代码:

# include & ltESP8266WiFi.h & gt # include & lt;public subclient . h & gt; # include & lt;ArduinoJson.h & gt # define sensor _ pin 13 /*连接您的WIFI SSID和密码,九个设备可以与*/ # define WIFI _ SSID " yours sid " # define WIFI _ passwd " yourwifipassword " /*产品的三重信息一致。根据九个测试设备的三元组,每个设备都烧不同的*/ # define product _ key " your product key " # define device _ name " your device name " # define device _ secret " your device secret " /* LD的在线环境域名和端口号不需要更改*/ # definitmqtt _ server product _ key "。IOT-as-mqtt . cn-Shanghai . aliyuncs . com " # definitmqtt _ port 1883 # definitmqtt _ usrna。product _ key /todo:MQTT连接的签名信息。哈希加密请到http://tool.oschina.net/encrypt?用" clientIdtestdeviceName"+设备名+"productKey"+设备型号ID+"timestamp 123456789 " Type=2进行加密 /hmacsha 1 _ src clientdtdevicename human 04产品密钥1 rezuvs103 timestamp 123456789 # define client _ ID " test | secure mode = 3,timestamp=123456789,signmethod=hmacsha1|"[/h wifi client espClient; PubSubClient客户端(espClient); void回调(char *topic,byte *payload,unsigned int length) { serial . print("消息到达["; Serial.print(题目); serial . print("]"); 有效负载[长度]= ' 0 '; serial . println((char *)payload); if (strstr(topic,ALINK _ TOPIC _ PROP _ SET)) { StaticJsonBuffer & lt;100 & gtjsonBufferJsonObject & amproot = jsonBuffer.parseObject(有效载荷); 如果(!root . success()) { serial . println(" parse object()failed "); 返回; } } } void WIFI init() { WIFI . mode(WIFI _ STA); WiFi.begin(WIFI_SSID,WIFI _ PASSWD); while (WiFi.status()!= WL _连接) { 延迟(1000); Serial.println("WiFi未连接"); } Serial.println("连接到AP "); Serial.println("IP地址:"); serial . println(wifi . localip()); client . set SERVER(MQTT _ SERVER,MQTT _ PORT);/*连接WiFi后,连接MQTT服务器*/ client.setcallback(回调); } void mqttCheckConnect() { while(!client . connected()) { serial . println("连接到MQTT服务器..."); if(CLIENT . connect(CLIENT _ ID,MQTT_USRNAME,MQTT _ PASSWD)) { serial . println(" MQTT Connected!"); //client . subscribe(ALINK _ TOPIC _ PROP _ POSTRSP); client . subscribe(ALINK _话题_道具_集); serial . println(" subscribe done "); } else { serial . print(" MQTT Connect err:"); serial . println(client . state()); 延迟(5000); } } } void mqttIntervalPost() { char param/*三倍的产品。根据9台测试设备的三元组,每台设备烧录不同的*/ # Define product _ key "您的产品密钥" # Define device _ name "您的设备名称" # Define device _ secret "您的设备密钥"[/; char JSON buf[128]; sprintf(param," {"MotionAlarmState":%d} ",digital read(13)); sprintf(jsonBuf,ALINK_BODY_FORMAT,ALINK _方法_道具_POST,param); serial . println(jsonBuf); client . publish(ALINK _ TOPIC _ PROP _ POST,jsonBuf); } void setup() { PIN mode(SENSOR _ PIN,INPUT); /*初始化串口进行调试*/ serial . begin(115200); serial . println(" Demo Start "); wifi nit(); } //循环函数永远反复运行 void loop() { if(millis()-lastMs & gt;= 5000) { lastMs = millis(); mqttCheckConnect(); /* Report */ mqttIntervalPost(); } client . loop(); if(digital read(SENSOR _ PIN)= = HIGH){ serial . println("检测到运动!"); 延迟(2000年); } else { serial . println("运动缺失!"); 延迟(2000年); } } 下面是一些需要解释的代码:

参考书阅览室

# include & ltESP8266WiFi.h & gt # include & lt;public subclient . h & gt; # include & lt;ArduinoJson.h & gt 如果之前没有用过arduino,这些库不是arduino提供的,需要导入。以ArduinoJson为例。具体操作方法见下图:



修改WiFi

# define wifi _ SSID " yours sid " # define wifi _ passwd " yourwifipassword " 这里需要输入您的家庭wifi SSID(即wifi名称)和密码。下面红框里的Wifi,SSID是“TOM”(注意大小写),密码是“123456”



修改三元组

[32]



修改HashMAC键

//todo:MQTT连接的签名信息。哈希加密请到http://tool.oschina.net/encrypt?用" clientIdtestdeviceName"+设备名+"productKey"+设备型号ID+"timestamp 123456789 " Type=2进行加密 /hmacsha 1 _ src clientdtdevicename human 04产品key 1 rezuvs103 timestamp 123456789 # Define client _ ID " test | secure mode = 3,Stamp = 123456789,Sign Method = hmacsha1 | "[/h因此,有必要为每个器件配置不同的Hmac值。方法是先合并一段字段:

" clientitdevicename "+设备名称+"产品密钥"+设备型号ID+"时间戳123456789 "

比如刚才截图的三联,字段是

clientidtestdevicename human 01 product key 1 rezuvs 103 timestamp 123456789

写完这个字段,到这里加密。选择HmacSHA1方法,上面的字段作为明文,deviceSecret作为密钥。见下图:



可以获得下面的密文:

e 30657 f 36 e 7 ded 9 a 2781 BBA 97 b 0 dee 79 e 8 fa 31 b 6

然后替换MQTT_PASSWD的原始字段。

代码编译完成后,选择相应的开发板和烧线上传。上电后,可以查看串口和Link Development上的测试设备列表,看是否成功联机。





应用开发

在左栏点击Web应用开发,选择可视化应用,输入名称。然后我们进入可视化开发Web应用的工作台。



然后我们需要文本组件来表示标题等等。需要指示灯来指示当前坑内是否有人。



接下来以pit 1为例,说明如何将组件绑定到设备。单击右侧面板上的“数据”并选择关联的设备。所有已创建的测试设备都将显示在这里。选择与地坑位置相对应的传感器,然后选择显示的数据(布尔红外监控状态)。这就完成了数据的绑定。



可以在线模拟一下,看看连接是否成功。另外,一些个性化的款式也可以自己配置。



然后就是发挥创意的时候了。可以上传各种背景图,添加各种小样式,制作看板如图。最后,点击右上角的预览。



这就完成了一个看板!不要忍气吞声,只要检查一下厕所里有没有空剩余坑就行了!

推送的教程会同步跟进~

部署

这是一个用于物理安装的盒子。为了更好的用户体验,我们在盒子上加了一个备注,“只检测人,不摄像头”,避免用户的隐私顾虑。





部署时使用了树莓派+显示屏。



惠及天妃公园一号楼四楼90%员工的智能马桶解决方案,完成!

欢迎使用Link Develop

Link Develop(物联网开发平台)是阿里云面向物联网领域提供的端到端一站式开发服务平台,可覆盖物联网行业所有应用场景,主要解决物联网开发领域开发环节长、技术栈复杂、协作成本高、方案移植难的问题,提供从硬件开发、服务安排、Web应用开发到移动app开发的全链路开发流程、框架/引擎、调试工具,向阿里云市场销售成熟的开发产品。

这篇文章的两位作者,一位是有法律背景的运营系学生,另一位是有设计背景的UED学生。两人都不是专业工程师,却能在短短一天内完成基于LINK开发的整个智能马桶的解决方案搭建。我相信,当大家认识到Link Develop平台的开发能力后,会有越来越多的新奇想法出现,物联网的应用开发也会在Link Develop的帮助下快速实现!

作者:杜皮格

您可以还会对下面的文章感兴趣

使用微信扫描二维码后

点击右上角发送给好友