Arduino开发-楼宇自动照明系统

物联网智能楼宇自动照明系统,用Arduino系列的WifiDuino作为主控开发板,配合Blinker提供的“点灯·blinker”APP,实现在该APP上控制LED亮暗、状态显示、温湿度显示、用小米小爱进行语音控制灯开关、亮暗程度等功能。

点灯科技的官网  https://www.diandeng.tech/home

开发者社区内教学  https://www.arduino.cn/thread-104162-1-1.html

本文章的内容都是参考了官网内的开发文档以及开发者社区内教学完成的,作者水平有限,文章难免出纰漏,有问题的话建议去以上两个网址查询

准备工作:

1.WifiDuino开发板

2.Arduino IDE

3.手机下载“点灯·blinker”APP,在点灯科技官网可以下载(上面第一个链接),注册好后,在APP界面点击右上角“+”号-独立设备-网络-阿里云-到Secret Key界面,把key复制下来,写程序要用。

 

 

4.一些必要的传感器,如声音、光敏、人体红外等,LED,杜邦线,语音控制需要用小米手机(小爱同学语音控制)

之后就可以打开Arduino IDE进行编程了。

打开Arduino IDE之后,插上WifiDuino开发板,配置好,关于开发板插入之后串口什么东西的配置,可以参考网上的博客,这里仅放几张图:

 设备管理器

 

连接好电脑后,COM8口是我的WifiDuino,连接好后刷新一下,如果没有出现,可能是没有安装驱动,

 驱动连接如下:

链接:https://pan.baidu.com/s/1O-uLR3fv637_2VpkOkGJDQ
提取码:6qbw

然后需要安装一些库文件,安装库文件的方法有很多,我介绍我使用的一种:

下载好库文件Zip后-解压-解压文件复制到arduino路径-libraries中,注意里面原有的库文件,打开之后里面有examples,src等文件夹,你复制进去之后也要在里面打开之后直接是有examples,src等文件夹,不要复制进去一个Crypto,打开之后还是Crypto,再打开才是examples,src等文件夹。

我把我所用的所有库文件放上来,可能有的不需要,但是保险还是都安装上吧,链接如下:

链接:https://pan.baidu.com/s/1kw6mIADdN-kZ7L0His-VbQ
提取码:agpx

等都装好之后,在Arduino中“工具”选项中选中自己使用的开发板WifiDuino,如下图所示

在Arduino中配置WfiDuino

弄好之后就可以开始编写程序了。

在做整个项目前,首先要了解一下 WifiDuino+点灯·blinker 控制的基本原理,首先打开点灯app的页面-点击你的设备-点击“载入示例”,出现如下界面

载入示例

软件界面

可以看到,图中有四个元素,一个“0次点击按键”,一个“点我计数”的按钮,一个“点我开关灯”的按钮,一个“Monitor”监视器,APP部分先结束。

打开Arduino IDE-文件-示例-Blinker-Blinker_hello-Hello_Wifi,如下图所示:

示例

打开程序后,需修改下图所示的部分:

将红色框部分,第一行改为最初在“点灯·blinker”中创建设备赋值的Secret Key复制上去,第二、第三行分别是你创建的无线网络的网络名和密码(可以自己用手机创建一个热点即可)。改好之后,将程序烧录进开发板,然后打开App,点击“点我开关灯按钮”可以看到开发板上有蓝灯(是开发自带的LED,引脚是LED2,可以用默认宏定义“LED_BUILTIN”来控制)随着点击亮暗。

上面这个程序是最基础的程序了,用手机App控制开发板上灯的亮暗,其实本文所介绍的项目的开发很简单,只要你理解了这个程序,你就可以写出这个项目的大部分功能。下面来简单解释一下这段代码是如何控制开发板上的灯亮暗的。

整个程序的整体思路是这样的,我们的填写的Secret Key是用来绑定我们app中的“设备”(也可以说是在app上的虚拟设备界面)与我们物理上的WifiDuino开发板的,我们填写的SSID和PSWD是我们创建的网络的名称和密码,这可以用来让我们的WifiDuino通过该无线网络连接上网络,然后与app建立连接。之后,点击app中“点我开关灯”按钮,可以向WifiDuino开发板中发送开灯或者关灯的命令,我们可以看到,点击“点我开关灯”后,app中的“Monitor”会出现  “btn-abc”:"tap"  的命令,这其实就是app向WifiDuino开发板发送的json格式的命令,而因为我们之前也安装了库文件,所以开发板中的程序会自动解析收到的json格式命令,并执行命令。

那么开发板中的程序是如何执行这些命令的呢?

我们看到程序中这两行代码,程序上的注解是“新建组件对象”,我们可以隐约感觉到,组件就是app里的那四个组件,那么建立的“组件对象“”自然是可以在本程序中控制app里那四个组件的对象了。

我们很清楚“Button1”是按钮,那么“Number1”呢?事实上,我们打开我们的app,进入我们的设备,看到右上角有一个铅笔,点击之后,会发现我们是可以自己编辑组件的,如下图所示:

 

我们可以看到下面一行有文字、按键、数据这些组件选项,事实上,程序中地Button对象对应“按键”组件,Number对象对应“数据”组件。

我们还可以注意到,图中的四个组件左上角都有蓝色的小字,“点我开关灯”上面的小字是“btn-abc”,“0次点击按键”上面的小字是“num-abc”,是跟上面两行代码中括号的内容是一致的。

实际上,程序中就是通过这种方式,来绑定对象与app中组件的“数据键名”,“数据键名”即“btn-abc”、"num-abc",我们在上面的app界面中点击“点我开关灯”,会发现数据键名是可以自己设置的,如下图所示:

 

 

这样我们就清楚在程序中是如何将对象与app中的组件关联起来的了。以“点我开关灯”按钮为例,在程序中写入如下代码:

 

 就可以将Button1对象与app中数据键名为“btn-abc”的按钮绑定在一起。

 绑定在一起之后,每当app中点击该按钮,app端便会向我们的开发板发送josn格式的命令{"btn-123":"tap"},如下图所示:

当开发板端接收到该命令后,会自动解析该命令,并调用 与数据键名为"btn-123"绑定在一起的对象 的回调函数,并将状态数据"tap"放入该回调函数的形式参数中。

开发板程序中与 app中数据键名为"btn-123"的组件对象 绑定在一起的对象为Button1,在setup()函数中再将对象Button1与该对象的回调函数"button1_callback"相关联,这样当在app中点击该按钮时,该回调函数则会被调用。对象Button1与回调函数"button1_callback"的绑定如下图所示:

 

我们只需要在开发板端编写回调函数,决定当接收到该命令后开发板应该做什么事情。

回调函数如下:

 该回调函数的意思是,当调用该回调函数时,第一句在打印Blinker日志上输出状态state,第二句,每当调用一次回调函数,改变LED_BUILTIN的状态。

此外,点灯·blinker的按钮分为普通按钮和开关按钮,如下图所示:

设置为开关按键后,当该按键处于关闭状态时,点击该按键,app端会向开发板发送{"btn-w4m","on"}的命令,当按键处于开启状态时,点击该按键,app端会向开发板发送

{"btn-w4m","off"}的命令,下面简单用开关按键的回调函数讲一下如何在app端控制开发板上LED灯光亮暗:

 

当点击开关按钮后,app端会向开发板端发送命令,其中发送来的"on"和"off"会存储到形式参数state中,在回调函数内判断,如果命令是"on",说明按钮为关闭状态时按了一下按钮,则另开发板D10引脚为高电平(D10)连接LED,并用ledButton.print("on")来将app中的按钮呈打开状态。(ledButton为开发板程序中 与开关按钮组件的数据键名 绑定的对象)

了解了以上知识,就可以开始我们自动照明系统的开发了,以上所有组件的操作在点灯官网的开发文档都可以查询到。

posted @ 2021-06-12 00:02  SanFranciscoo  阅读(1158)  评论(0编辑  收藏  举报