查看下篇文章,點擊這裡。
物聯網開發的技術鏈比較長,很多情況下,如果沒有很好的引導,很難從互聯網層面轉到物聯網層面,也不可能真正的0基礎轉行。
下文以樹莓派4和Arduino為例,由淺入深來模擬一個物聯網應用開發的實例。樹莓派4的初始化的教程在語雀上有相關的介紹(https://www.yuque.com/miniqiang),包括如何註冊阿里雲、初始化樹莓派,至於如何連接樹莓派,可以在https://pinout.xyz/pinout上查看,有關於樹莓派上每一個管腳的功能介紹。
一、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 {
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燈的亮滅。可能大家會有疑問,上面的實驗有什麼用呢,就是我們可以通過上面的程序來控制繼電器,進而通過繼電器(如下圖)來控制家裡的開關,比如小米的智能插座,然後實現控制家裡電器開關的作用,最終可以實現智能家居。
查看下篇文章,點擊這裡。