查看下篇文章,点击这里。
物联网开发的技术链比较长,很多情况下,如果没有很好的引导,很难从互联网层面转到物联网层面,也不可能真正的0基础转行。
下文以树莓派4和Arduino为例,由浅入深来模拟一个物联网应用开发的实例。树莓派4的初始化的教程在语雀上有相关的介绍(https://www.yuque.com/miniqiang)。
一、Hello World
任何一个软件开发者都会先从HelloWorld程序起步,物联网开发也一样,不过物联网硬件开发的HelloWorld程序一般是通过控制灯的闪烁(点灯实验)来实现,与软件开发不同的是硬件的HelloWorld程序会贯穿我们整个的物联网应用开发过程,一定程度上也是该过程中最重要的一个程序。
(一)树莓派4的点灯实验
我们将树莓派4连接到计算机上,通过一个小的程序来实现Led灯的控制,也就是HelloWorld程序了,其python代码如下。
coding=utf-8
import RPi.GPIO as gpio
import time
gpio.setmode(gpio.BOARD) #IO口编码规则选择板卡编号
gpio.setup(5,gpio.OUT) #5号口输出
while True:
gpio.output(5,gpio.HIGH) # 5号引脚输出高电平
time.sleep(1) #停顿1秒
gpio.output(5,gpio.LOW) #5号引脚输出低电平
time.sleep(1) #停顿1秒
通过运行以上代码,我们便能实现Led灯的闪烁,实现了一个最简单的控制硬件的程序。
(二)Arduino的点灯实验
大部分情况下我们是不会直接用计算机进行点灯的,因为系统会直接调用管脚,而管脚是直接接到硬件的CPU上的,万一接错了一些地方,可能会造成严重的后果,甚至烧毁CPU。一般来说,我们会使用Arduino板,通过USB来对其进行控制,再通过网线等连接到其他硬件上进行复杂的开发工作。
以下是实现Arduino点灯实验的Blink代码(C++):
void setup()
{
pinMode(2,OUTPUT);
}
void loop(){
digitalWrite(2,HIGH);
delay(1000); //ms
digitalWrite(2,LOW);
delay(1000);
}
在选择好相应的板卡和串口后,点击上传程序,会自动编译,程序成功上传到板子中后就可以看到Led灯如程序设定的有规律亮灭现象,这就说明我们的点灯实验成功了。
(三)通过Json来进行控制Led灯
上面两个实验中,灯的亮灭均是由写好的程序来控制的,不受我们行为或者指令的控制,那么如果要实现数据可控,比如通过阿里云来控制的话,我们要怎么做呢?这里我们举一个例子,我们用json来传递我们的指令,进而控制灯的开关。实现该功能的步骤大致如下:
1、初始化端口;
2、串口处理,如果收到了消息,就把消息取出来交给json处理,函数代码如下(C++):
//串口处理
if(Serial.available()>0)//检查串口是否有数据,并且缓冲区是否可用
{
delay(50);
byte SerialDataLen = Serial.available();//获取消息长度
char SerialData[SerialDataLen];
for(int a=0;a<SerialDataLen;a++)
{
SerialData[a]=rSerial.read();
}
}
3、json处理,如果错误,就返回一个json错误,并且返回程序,如果正确,就会执行动作,其中json消息类似{"O":2,"D":0-1},"O"代表消息输出的串口,"D"代表动作,0为关灯,1为开灯,json处理函数的代码如下(C++):
//json处理
size_t capacity = JSON_ARRAY_SIZE(2)+30;
DynamicJsonDocument JSON(capacity);
//判断串口消息是否可以解析
DeserializationError error = deserializeJson(JSON.SerialData);
if(error)//判断对象是否符合标准
{
Serial.printin("json.error");
return;
}
4、执行动作,其代码如下(C++):
//执行动作
byte sw = JSON['O'];
byte type = JSON['D'];
digitalWrite(sw.type); //配置控制状态
在完成以上步骤程序的书写、编译以及上传之后,通过串口监视器,发送json消息给串口,我们就实现了通过USB线的方式来人为控制灯的亮灭。
二、树莓派4+Arduino的点灯实验
上面通过Json来进行控制Led灯的实验我们仍然是直接用的计算机来传递指令,下面我们用树莓派来进行控制。我们用USB将Arduino板子和树莓派4连接在一起,如果树莓派4检测到了板子,就会多出一个ttyUSB0的串口,代表设备连接成功。我们要实现的功能与上面的实验类似,就是通过指令来控制连接在Arduino板子上的Led灯的开关。其Blink代码如下(python):
import serial,time,json
port = serial.Serial(port='dev/ttyUSB0',baudrate=9600,
bytesize=8,parity='N',stopbits=1,timeout=2)
time.sleep(2)
On = {'O':2,'D':0}
On = json.dums(On)
Off = {'O':2,'D':0}
Off = json.dumps(Off)
while True:
port.write(str.encode(On))
time.sleep(1)
port.write(str.encode(Off))
time.sleep(1)
通过以上程序我们就实现了通过计算机软件来控制前端的硬件设备,在该例子中树莓派4通过USB线每次给Arduino板子发送一条指令来控制Led灯的亮灭。可能大家会有疑问,上面的实验有什么用呢,就是我们可以通过上面的程序来控制继电器,进而通过继电器(如下图)来控制家里的开关,比如小米的智能插座,然后实现控制家里电器开关的作用,最终可以实现智能家居。
查看下篇文章,点击这里。