<noscript id="mmkmi"><source id="mmkmi"></source></noscript>
  • <noscript id="mmkmi"><kbd id="mmkmi"></kbd></noscript>
  • <table id="mmkmi"><source id="mmkmi"></source></table>
  • 樹莓派通過貝殼物聯平臺控制LED

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

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


    環境:

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


    需要安裝RPi.GPIO庫

    程序分析:

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

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

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

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


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

    # -*- coding: utf-8 -*-
    import socket  #socket通訊
    import json    #命令解析
    import time    
    import datetime #定時循環
    import os       #系統退出使用
    import RPi.GPIO as GPIO  #python的GPIO控制
    
    #調用數據接口發送數據
    def f_sendTemp(sock,DEVID,value):
            jsontemp="{\"M\":\"update\",\"ID\":\""+DEVID+"\",\"V\":{\"數據接口ID\":\"數據\"}}\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)
                                                    #退出時關閉sock
                                                    sock.close()
                                                    os._exit(0)                                                         
    
    #主程序
    #需要替換的地方
    DEVID="MyID"             #貝殼物聯智能設備ID
    DEVPWD="My API Key"      #貝殼物聯智能設備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.eqytg.org', 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秒發送一次溫度并且等待命令
            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.命令發送不要太快,小于4秒發送多個命令處理會出錯.

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

    所以此程序只用于測試,目前還無法用于生產環境,我會持續改進.

    接線圖:

    樹莓派接線圖.jpg

    點亮LED

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


    評論:共2條

    midaszhou 評論于:2016-07-11 08:28:46
    期待更新程序!!
    z494627 評論于:2016-08-09 10:24:28
    出什么問題了?請將問題發給我.QQ群找我:峰回路轉
    返回頂部
    <noscript id="mmkmi"><source id="mmkmi"></source></noscript>
  • <noscript id="mmkmi"><kbd id="mmkmi"></kbd></noscript>
  • <table id="mmkmi"><source id="mmkmi"></source></table>
  • 三上悠亚在线观看