標籤:python版本 成功 樹莓派串口 操作 通訊模組 方式 2.7 ext 存在
環境:raspbian-stretch(2018-06-27)
樹莓派:3代B型
1、樹莓派裝置,需要在野外也能擁有獨立連網能力,那必不可少的需要使用物聯網模組。
這裡使用的是微雪的SIM868通訊模組,如:
2、將SIM868如下插入在空展板中,SIM868中使用的是聯通4Gsim卡,其實SIM868採用PIN#8(TX)、PIN#10(RX)引腳與樹莓派進行串口通訊,供電則是通過PIN#4(5V)、PIN#6(GOUND)支援。SIM868模組採用http傳輸協議與伺服器串連。
3、伺服器配置
安裝Apache服務,使用xampp軟體安裝該服務,xampp連結:https://pan.baidu.com/s/15dt5s3DbZVd8YPckv2GkzA 密碼:78fg
運行XAMPP Control Panel,
啟動Apache服務,如果啟動失敗,應該是連接埠被佔用,更改Apache的服務連接埠,就OK!
4、程式碼
1)、python代碼
import timeimport serial def send_data(param): W_http_6=‘AT+HTTPPARA="URL","http://120.78.181.110:90/iot.php?status=‘+str(param)+‘"\r\n‘ ser.write(W_http_6) time.sleep(2) W_http_7=‘AT+HTTPACTION=0\r\n‘ ser.write(W_http_7) time.sleep(1)if __name__ == ‘__main__‘: ser = serial.Serial("/dev/ttyS0",115200) print ser W_http_1=‘AT+HTTPTERM\r\n‘ ser.write(W_http_1) print "http_1" time.sleep(2) W_http_2=‘AT+SAPBR=3,1,"CONTYPE","GPRS"\r\n‘ ser.write(W_http_2) print "http_2" time.sleep(2) W_http_3=‘AT+SAPBR=3,1,"APN","CMNET"\r\n‘ ser.write(W_http_3) print "http_3" time.sleep(2) W_http_4=‘AT+SAPBR=1,1\r\n‘ ser.write(W_http_4) print "http_4" time.sleep(2) W_http_5=‘AT+HTTPINIT\r\n‘ ser.write(W_http_5) print "http_5" time.sleep(2) status=1 while True: send_data(status) print status status = status+1 time.sleep(3)
2)、php程式碼:
<?phpheader("Content-type: text/html; charset=utf-8");$file = ‘log.txt‘;//要寫入檔案的檔案名稱(可以是任意檔案名稱),如果檔案不存在,將會建立一個$status = $_GET[‘status‘];echo $status ; if($status != ""){ $content = "status=".$status.",time=".date("Y/m/d H:i:sa")."\n"; if($f = file_put_contents($file, $content,FILE_APPEND)){// 這個函數支援版本(PHP 5) echo "寫入成功。<br />"; }}if($data = file_get_contents($file)){; // 這個函數支援版本(PHP 4 >= 4.3.0, PHP 5) echo "寫入檔案的內容是:$data";} ?>
5、代碼解析
這裡使用的Python版本號碼為2.7.13
import timeimport serial
引用了python的2個類庫time以及串口調試庫serial,為實現程式的調試可編寫,在使用serial串口調試庫前,要實現樹莓派的串口配置和Linux系統下的串口調試工具minicom的安裝。具體方法可參考之前的文章《樹莓派串口配置及minicom的安裝》
def send_data(param): W_http_6=‘AT+HTTPPARA="URL","http://120.78.181.110:90/iot.php?status=‘+str(param)+‘"\r\n‘ ser.write(W_http_6) time.sleep(2) W_http_7=‘AT+HTTPACTION=0\r\n‘ ser.write(W_http_7) time.sleep(1)
這裡將主函數迴圈的狀態status變數的值當做參數傳送給你個send_data()函數,在添加到HTTP請求的URL中,在伺服器端寫了個PHP程式iot.php(程式源碼解析如下)用以接收SIM868通訊模組發送過來的HTTP請求,並使用GET的方式獲得到HTTP請求URL中傳入的status值,並插入到日誌txt中。if __name__ == ‘__main__‘: ser = serial.Serial("/dev/ttyS0",115200) print ser W_http_1=‘AT+HTTPTERM\r\n‘ ser.write(W_http_1) print "http_1" time.sleep(2) W_http_2=‘AT+SAPBR=3,1,"CONTYPE","GPRS"\r\n‘ ser.write(W_http_2) print "http_2" time.sleep(2) W_http_3=‘AT+SAPBR=3,1,"APN","CMNET"\r\n‘ ser.write(W_http_3) print "http_3" time.sleep(2) W_http_4=‘AT+SAPBR=1,1\r\n‘ ser.write(W_http_4) print "http_4" time.sleep(2) W_http_5=‘AT+HTTPINIT\r\n‘ ser.write(W_http_5) print "http_5" time.sleep(2) status=1 while True: send_data(status) print status status = status+1 time.sleep(3)
以上代碼是在通過調用serial庫,設定樹莓派串口通訊的傳輸速率為115200,並使用 ser.write()函數向串口寫入可操作SIM868模組進行通訊的AT指令,這裡的AT指令是對SIM868進行HTTP通訊前的配置,具體AT指令的含義在這裡不再贅述,可自行百度尋找。這是使用time.sleep()函數控製程序執行的等待時間,確保串口寫入資料成功。
<?phpheader("Content-type: text/html; charset=utf-8");$file = ‘log.txt‘;//要寫入檔案的檔案名稱(可以是任意檔案名稱),如果檔案不存在,將會建立一個$status = $_GET[‘status‘];//從url中擷取status參數的值echo $status ; //輸出status參數的值 if($status != "")//如果status參數有值,則將該值插入到日誌中{ $content = "status=".$status.",time=".date("Y/m/d H:i:sa")." \n";//定義插入到日誌的資料格式 if($f = file_put_contents($file, $content,FILE_APPEND)){// 這個函數支援版本(PHP 5) echo "寫入成功。<br />"; }}//讀出日誌中的所有資料,並輸出到html中if($data = file_get_contents($file)){; // 這個函數支援版本(PHP 4 >= 4.3.0, PHP 5) echo "寫入檔案的內容是:$data";} ?>
參考資料:http://www.eefocus.com/communication/397109
python+樹莓派實現IoT(物聯網)資料上傳到伺服器