开源硬件领域有两大法宝,树莓派和Arduino,如果你手上正好有这两样东西,那么恭喜你,接下来你可以极为简单的构建一个家庭监控系统。本篇文章将指导您完成每一步骤,确保你不会遇到问题。
介绍
首先,肯定有工程师会有疑问,为什么要将树莓派和Arduino一起使用?树莓派具有适用于简单布尔任务(开或关)和读取一些低端温度传感器的GPIO,这样就够了吗?没有!对于更复杂的系统,我们需要使用微控制器来完成繁重的工作,比如Arduino,它具有带多个通道的ADC(模数转换器),PWM(脉冲宽度调制)通道和非常精确的时序。
例如,如果您想测量房屋的电能消耗,您需要一个电流互感器和一个基本电路,它将输出你可以使用ADC测量的电压。如果你想输出介于1和0之间的东西,比如可以产生像呼吸灯一样效果的LED,就可以使用PWM输出。最后,如果您需要具有非常精确定时的设备(如PID系统,多路复用LED阵列或控制步进电机),则需要一个微控制器。在本文的例子中,我们将使用Arduino Uno作为微控制器。
BOM和硬件原框图
对于此项目,您将需要以下内容:
Arduino Uno(如果你愿意,可以使用不同的Arduino产品)
树莓派(同样,树莓派的任何产品都可以)
树莓派电源(针对最新的树莓派3b+,最好配上一个额外的电源)
安装了Raspbian系统的SD卡(Raspbian Lite也可以)
传感器和Arduino的其它模块(取决于你想要实现什么功能)
Arduino IDE,Raspbian,C / C ++,HTML和javascript的基础知识(其实只需了解C / C ++,那就足够了。)
硬件原理框图并不复杂,取决于您想要实现的功能。在这个例子中,我使用了温度/湿度传感器和LED。
Arduino代码
为简单起见,这里仅展示如何从DHT11传感器读取温度和湿度以及如何远程闪烁LED。
数据通过串口以9600的波特率发送。在主函数中,我们读取串口并检查收到的内容。如果我们收到字符串“thl”,则意味着我们需要通过串口从传感器发送数据。为了使此功能正常工作,我们使用while循环并反复发送数据,直到我们收到“ok”以知道数据已到达服务器。如果我们收到字符串“led”,我们只是闪烁LED。在这里你可以添加你想要的任何函数和字符串——只需记住使用“thl”发送数据。
你需要知道的是这里我们以JavaScript Object Notation(JSON)形式发送数据。JavaScript Object Notatio