我的物聯(lián)網(wǎng)綜合知識之創(chuàng)建硬件端

上一節(jié),我們把服務(wù)端搭建了起來。并通過curl命令對溫度數(shù)據(jù)的上傳與存儲、Led燈的開關(guān)狀態(tài)改變進(jìn)行了測試。本節(jié),我們將使用Arduino UNO開發(fā)板和樹莓派作為控制器,連接傳感器(以溫度傳感器DS18B20為例)和執(zhí)行器(以Led燈為例)。

  • 控制器1樹莓派作為協(xié)調(diào)層,負(fù)責(zé)網(wǎng)絡(luò)連接,并通過串口接收來自Arduino開發(fā)板發(fā)來的傳感器數(shù)據(jù),通過Python代碼將數(shù)據(jù)上傳給服務(wù)端
  • 控制器2 Arduino UNO開發(fā)板作為硬件層,直接連接硬件,負(fù)責(zé)硬件控制,包括收集數(shù)據(jù)和控制狀態(tài)。

硬件連接

硬件連接示意圖

硬件連接實(shí)物圖

連接說明:

  • 對于Led燈,要正確區(qū)分正負(fù)極,長腳為正極,短腳為負(fù)極,或者大的PN結(jié)對應(yīng)負(fù)極,小的PN結(jié)對應(yīng)正極,Led的正極接Arduino開發(fā)板的13端口,負(fù)極接GND即可。
  • 對于DS18B20,面對平的一面,從左至右,依次接Arduino開發(fā)板的負(fù)極、2端口、正極5v。

Arduino代碼:讀取連接在Arduino上的溫度傳感器數(shù)據(jù),發(fā)給串口,并且通過串口讀取來自python代碼的led狀態(tài),控制燈的開與關(guān)。

#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
int ledPort=13;//Led燈的正極連接到13端口
int serialData;
void setup(void)
{
  Serial.begin(9600);
  sensors.begin();
  pinMode(ledPort,OUTPUT);
}

void loop(void)
{
  String inString="";
  while (Serial.available()>0) {
      int inChar=Serial.read();
      if (isDigit(inChar)){
          inString+=(char)inChar;
        }
      serialData=inString.toInt();
    }
    if (serialData==1){
        digitalWrite(ledPort,HIGH);
    }else{
      digitalWrite(ledPort,LOW);      
    }
  sensors.requestTemperatures(); // Send the command to get temperature
  Serial.print("{\"temperature\":");
  Serial.print(sensors.getTempCByIndex(0));
  Serial.println("}");
  delay(1000);//每隔1秒獲得一次傳感器的數(shù)據(jù)
}

Python代碼:與服務(wù)端交互,將傳感器數(shù)據(jù)上傳,并將led狀態(tài)下發(fā)。

import json
import urllib2
import serial
import time
import requests

url_led="http://localhost:3000/led"
ser=serial.Serial("/dev/ttyUSB0",9600)

while 1:
   sensor=ser.readline()
   sensor=json.loads(sensor)
   r=requests.post("http://localhost:3000/sensor",data=sensor)
   r.text
   data=urllib2.urlopen(url_led)
   status=json.load(data)[0]['status']
   if status:
      ser.write('1')
   else:
      ser.write('0')

   time.sleep(1)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容