本项目将利用Medium One端到端物联网云平台,允许终端用户监控、自动化和远程控制园艺设施中的人工照明,无论是温室、垂直农场还是其他需要此类功能的环境,都适用。
本项目将使用支持快速原型设计的Microchip Xplained开发板系列,以及SAM W25 Xplained Pro评估套件。Xplained开发板搭载基于Arm®Cortex®-M0+的ATSAMD21G18A微控制器。其他关键组件包括:
物料清单(BOM)如下所示。您也可以访问mouser.cn订购所需的零件。截至本文撰写时,以下物料清单的价格约为125美元(USD),其中不含LED灯条。若把LED灯条计算在内,成本也就是400美元多一点。表1列出了物料清单中的物料。
光学传感器开发工具
环境光传感器B/O TEMT6000
以下是完成本项目所需的推荐工具列表:
图1:Wieland RST 16i2/3连接器适用于可能存在湿气的环境(例如园艺应用)
本项目的组装步骤如下:
LRS 75-36开关电源
图2:电源接线完成。顶部为 NEMA 15-5P插头,底部为16AWG室外照明电缆,连接到LED驱动板
MIC3202 HB LED驱动板
图3:双转塔焊接端子
SAM W25 Xplained Pro开发板
图4:SAM W25板(顶部)、TEMT6000光传感器(左下方)和LED驱动板(右下方)
TEMT6000环境光传感器
图5:TEMT6000环境光传感器
LED灯条
图6:项目的功能框图
在这一节,我们将详细介绍本项目中涉及的软件,阐述Microchip Xplained开发板所需的固件和支持文件,以及Medium One沙盒在您的网络浏览器中的设置。您可以根据自己的个人喜好,使用Atmel Studio 7或Arduino IDE来编辑为本项目提供的源代码。
为方便您使用Arduino IDE,Microchip在其GitHub网站上提供了所需的文件。在Arduino IDE中,转到File>Preferences>Additional Boards Manager URLs,然后添加此URL:
https://github.com/AtmelUniversityFrance/atmel-samd21-xpro-boardmanagermodule/releases/download/v0.3.0/package_atmel-samd21-xpro-boardmanagermodule_0.3.0_index.json
本项目的软件分为三部分:
在微控制器板上运行的固件很简单。代码按顺序执行以下操作:
设置
关于项目中使用的map函数的简要说明——map函数的定义如下:
map函数可用于将数字从一个范围映射到另一个范围。例如,模数转换器(ADC)的分辨率为1024,而analogWrite函数只接受0到255的值。map函数接受5个参数,包括:
在这个示例中,x将设置为100,因为50是原来1和100范围内的中间值,而100是新范围内的中间值。
项目文件
以下文件位于:https://github.com/Mouser-Electronics/MicrochipHorticultureLighting
库
预处理器指令#include允许我们将库添加到项目中,从而促进代码复用。除非您有非常特殊的需求,否则就不需要再重新编写代码。本项目使用以下库:
图7:来自微控制器和智能手机应用程序的原始数据流
变量与常量
前几个变量是存储各种必要信息的字符数组。首先,SSID和WPA2是连接到所需无线网络的密钥。接下来,broker和port存储MQTT服务器的URL及其使用的TCP端口。然后,topic和subtopic存储URL路径,并通过MQTT消息从Medium One接收数据或将数据提交到Medium One。最后,pubMessageStart和pubMessageEnd是消息的固定部分,它们将亮度读数发送到Medium One。
const char broker[ ]=SECRET_BROKER
const int port=SECRET_PORT
char pass[ ]=SECRET_PASS
const char topic[ ]=SECRET_TOPIC
const char subtopic[ ]=SECRET_SUBTOPIC
const char pubMessageStart[ ]="{"event_data":{"lux":""
const char pubMessageEnd[ ]=""}}"
接下来,有几个常量用于控制硬件的功能和交互。
接下来,还有几个常量用于控制硬件的功能和交互。
最后,我们还提供各种类的示例:
函数
Medium One为物联网开发人员提供了一个平台,在这个平台上开发人员的物联网设备可以传输和编译来自多个物联网设备的数据集。Medium One提供了一个很棒的教程,介绍如何开始使用其服务。本指南将重点介绍我们在设置Microchip Xplained通过其MQTT API与Medium One通信时遇到的问题。本项目将利用Medium One的MQTT(消息队列遥测传输)协议。MQTT是一个基于发布-订阅的消息传递协议,位于TCP/IP协议之上。与RESTful API相反,MQTT需要一个集中式消息代理。因此,端点设备不能彼此直接通信。这有利也有弊。RESTful API依赖客户机始终启动通信,而MQTT由于使用了发布/订阅(Pub/Sub)架构,允许服务器推送数据。RESTful设备可以直接相互通信。MQTT依赖于集中式消息代理(例如,云中的服务器),在传输此类遥测数据时效率要高得多。
图8:Medium One的配置画面
新项目激活后,必须记下Medium One自动生成的一些关键信息,以便后面在固件中使用(具体来说,就是把这些信息存储在secretstuff.h头文件中)。
这些关键信息包括:
接下来,我们确定可以从Medium One 网站的哪个地方获取这些信息:
固件还需要另外两项关键信息:Medium One MQTT服务器URL(MQTT.mediumone.com)和TCP端口,端口值为61619(非安全)或61620(安全)。最后,我们需要设置一个仪表板,看是否收到了来自Microchip Xplained开发板的数据。
为此我们需要:
对于本项目,请下载Medium One在Apple iOS App Store上提供的专用"IoT Controller"。
图9:Medium One Workflow Studio
要详细了解设置手机应用程序的步骤说明,请点击查看Medium One的教程。本节将重点介绍此特定项目需要完成的工作。我们将从添加新的小部件开始,让用户控制灯光是自动控制模式还是手动控制模式。
import MQTT
mode = IONode.get_input('in1')['event_data']['value']
if (mode == "on"):
MQTT.publish_event_to_client('device1', 'manualControl_ON', encoding='utf-8')
else:
MQTT.publish_event_to_client('device1', 'manualControl_OFF', encoding='utf-8')
图11:完成时的用户界面(UI)
接下来,让我们创建一个滑块来控制LED的亮度。
level = IONode.get_input('in1')['event_data']['value']
MQTT.publish_event_to_client('device1', str(level), encoding='utf-8')
拨动智能手机上的开关,确认显示的消息包含0到100之间的字符串值(整数)。
图12a:负责处理智能手机交互的后台代码。顶部:设置手动亮度设定值。底部:打开和关闭手动模式
图12b:底部:打开和关闭手动模式
图13:使用智能手机控制照明
在项目编译好之后,将Xplained开发板连接到计算机并启动串行终端。您应该能遥测到来自光传感器的数据流以及发往和来自Medium One MQTT代理的MQTT消息。如果没有,请检查是否有错误消息。一些常见错误包括:
图14:左侧:亮度约为50%、右侧:亮度约为90%
专业工程师Michael Parks是贸泽电子的特约作者,同时也是Green Shoe Garage的所有者。Green Shoe Garage是一个提供定制电子设计的工作室和技术咨询机构,位于马里兰州南部。Michael Parks创办了《S.T.E.A.M. Power Podcast》播客来提升公众对科技的认知,他拥有马里兰州专业工程师资质并拥有约翰·霍普金斯大学的系统工程硕士学位。