国内综合精彩aⅤ无码不卡_日本少妇做爰全过程_欧美性爱在线播放免费_午夜?V日韩一区二区_免费a级毛片无码免费播放_成在人线av无码喷水_亚洲精品网站色视频_国产婷婷精品成人_老师撩起裙子让我桶的视频_秋霞影院国产

樹莓派通過貝殼物聯(lián)平臺控制LED

作者:z494627 | 更新時間:2016-05-02 | 瀏覽量:3238

貝殼物聯(lián)上一直沒有樹莓派控制的文檔,正好用手頭的樹莓派1代做一個測試


環(huán)境:

  樹莓派1代,Linux raspberrypi 3.6.11,python2.7.3


需要安裝RPi.GPIO庫

程序分析:

 1.通過socket連接貝殼物聯(lián)(參照API),系統(tǒng)會返回:{"M":"WELCOME TO BIGIOT"}\n

 2.發(fā)送checkin,設備報告上線,返回{"M":"checkinok","ID":"D+設別ID","NAME":"你的設備名稱","T":"1462165538"}\n表示你的設備已經(jīng)上線

 3.發(fā)送數(shù)據(jù):我的數(shù)據(jù)接口定義了一個溫度,目前只發(fā)送一個固定的溫度,下一步DHT11接上發(fā)實際溫度

 4.等待接收命令,按照命令方式觸發(fā)動作


下面是代碼:將文件保存到文件:testBigiot.py,運行時使用root登錄或者sudo python testBigiot.py(因為gpio控制需要root權(quán)限)

# -*- coding: utf-8 -*-
import socket  #socket通訊
import json    #命令解析
import time    
import datetime #定時循環(huán)
import os       #系統(tǒng)退出使用
import RPi.GPIO as GPIO  #python的GPIO控制

#調(diào)用數(shù)據(jù)接口發(fā)送數(shù)據(jù)
def f_sendTemp(sock,DEVID,value):
        jsontemp="{\"M\":\"update\",\"ID\":\""+DEVID+"\",\"V\":{\"數(shù)據(jù)接口ID\":\"數(shù)據(jù)\"}}\n"       
        sock.send(jsontemp)
        time.sleep(1)

#checkin       
def f_checkIn(sock,DEVID,DEVPWD):
        jsoncheckin= "{\"M\":\"checkin\",\"ID\":\""+DEVID+"\",\"K\":\""+DEVPWD+"\"}\n"
        print "jsoncheckin:",jsoncheckin
        sock.send(jsoncheckin)
        data = sock.recv(1024)
        print 'Received', repr(data)

#接收命令
def f_recv(sock,DEVID,DEVPWD):
        try:
                rcvData = sock.recv(75)  #接收指令稍微長于一個命令的長度
        except:
                return
        
        print 'Received', rcvData         
        s=json.loads(rcvData)
        print 'Received', s
        #指令語句
        if s['M'] == 'say':
                print 'Command', s['C']
                
#亮燈
                if s['C'] == 'play' :
                        GPIO.output(led_pin,GPIO.HIGH)
                #滅燈
                if s['C']=='stop' :
                        GPIO.output(led_pin,GPIO.LOW)
                #退出程序
                if s['C']=='offOn' :
                        jsonLogOut="{\"M\":\"logou\",\"ID\":"+DEVID+"\",\"NAME\":\"openwrt\",\"T\":\""+str(int(time.time()))+"\"}\n"
                                                sock.send(jsonLogOut)
                                                time.sleep(3)
                                                #退出時關(guān)閉sock
                                                sock.close()
                                                os._exit(0)                                                         

#主程序
#需要替換的地方
DEVID="MyID"             #貝殼物聯(lián)智能設備ID
DEVPWD="My API Key"      #貝殼物聯(lián)智能設備API KEY
#=======

led_pin=24              #LED燈連接的GPIO號
oldTime=datetime.datetime.now()


sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print time.strftime('%Y-%m-%d %X',time.localtime())
sock.connect(('www.placeboworld.cn', 8181))
Data = sock.recv(1024)
print 'Received', repr(Data)
time.sleep(5)
f_checkIn(sock,DEVID,DEVPWD)

#初始化GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(led_pin,GPIO.OUT)

while 1==1:
        now=datetime.datetime.now()
        #每隔4秒發(fā)送一次溫度并且等待命令
        if ((oldTime - now).seconds>4):
               print time.strftime('%Y-%m-%d %X',time.localtime())
               f_sendTemp(sock,DEVID,DEVPWD)
               f_recv(sock,DEVID,DEVPWD)
               oldTime=now

缺陷:

 1.命令發(fā)送不要太快,小于4秒發(fā)送多個命令處理會出錯.

 2.長時間不發(fā)送命令會導致程序崩潰.

所以此程序只用于測試,目前還無法用于生產(chǎn)環(huán)境,我會持續(xù)改進.

接線圖:

樹莓派接線圖.jpg

點亮LED

樹莓派接線圖_點亮LED.jpg


評論:共2條

midaszhou 評論于:2016-07-11 08:28:46
期待更新程序??!
z494627 評論于:2016-08-09 10:24:28
出什么問題了?請將問題發(fā)給我.QQ群找我:峰回路轉(zhuǎn)
返回頂部