參考:1.
2.3.
4.
內容:
1. 基本上是按照參考1完成的,只是我的樹莓派是3b+,發光二極體是七彩的(有正負)。
2. 其他的區別還有pc端是python2.7,pi端是3.5.3。兩者語法有些不同,雖然我沒系統的學習過。具體的是pc端發過來的字串到pi端都變成了: b'*',*是傳輸的字串。只有強制轉化
bytes.decode(data)
才能使用。如果要從pi再傳輸到pc還要在轉化回去,參考2。
3. 參考1把核心函式寫出了,如果要做穩定還有很多細節需要新增。如第二次或第n次連線時提示「address already in use ... ...」,是因為沒有允許ip和埠位址復用引起的,這個位址一直會被占用,除非重啟。利用參考3,可以解決這個問題。
gpio.cleanup()
但沒啥用,反而還有其他的warning。
5.「如果我們想要在樹莓派執行server端電腦上執行client端,讓樹莓派來作為伺服器接收使用者資料的話,我們就可以在樹莓派上ifconfig一下檢視一下它的位址,並將兩個程式的ip位址都改為它,接著先執行樹莓派上的server後執行電腦上的client就行了」--參考4
6. 接下來要仔細學習下這次用到的socket通訊!
socket樹莓派實時傳輸到pc上
【玩樹莓】程式設計篇(二)python tcp、udp 網路程式設計
除本文之外還有server端和client端的雙向資料收發,以及udp協議的程式設計(包括資料傳輸和多執行緒操作)
其他用c/c++進行的類似控制
1.2.
基於 socket 的 android與樹莓派通訊
介紹了socket通訊模型。
源**:
pi作server:
#import necessary package
import socket
import time
import sys
import rpi.gpio as gpio
gpio.cleanup()
#define host ip: rpi's ip
host_ip = "169.254.64.199"
host_port = 8881
print("starting socket: tcp...")
#1.create socket object:socket=socket.socket(family,type)
socket_tcp = socket.socket(socket.af_inet, socket.sock_stream)
print("tcp server listen @ %s:%d!" %(host_ip, host_port) )
# 在繫結前呼叫setsockopt讓套接字允許位址重用
socket_tcp.setsockopt(socket.sol_socket, socket.so_reuseaddr, 1)
host_addr = (host_ip, host_port)
#2.bind socket to addr:socket.bind(address)
socket_tcp.bind(host_addr)
#3.listen connection request:socket.listen(backlog)
socket_tcp.listen(1)
#4.waite for client:connection,address=socket.accept()
socket_con, (client_ip, client_port) = socket_tcp.accept()
print("connection accepted from %s." %client_ip)
socket_con.send(b'welcome to rpi tcp server!')
#5.handle
gpio.setmode(gpio.board)
gpio.setup(12,gpio.out)
print("receiving package...")
while true:
try:
data=socket_con.recv(512)
data_trans=bytes.decode(data)
print(data_trans)
if len(data_trans)>0:
print("received:%s"%data_trans)
if data_trans=='1':
gpio.output(12,gpio.high)
elif data_trans=='0':
gpio.output(12,gpio.low)
socket_con.send(data)
time.sleep(1)
continue
except exception:
gpio.cleanup()
socket_tcp.close()
sys.exit(1)
pc作client:
import socket
import time
import sys
#rpi's ip
server_ip = "169.254.64.199"
server_port = 8881
print("starting socket: tcp...")
server_addr = (server_ip, server_port)
socket_tcp = socket.socket(socket.af_inet, socket.sock_stream)
while true:
try:
print("connecting to server @ %s:%d..." %(server_ip, server_port))
socket_tcp.connect(server_addr)
break
except exception:
print("can't connect to server,try it latter!")
time.sleep(1)
continue
print("please input 1 or 0 to turn on/off the led!")
while true:
try:
data = socket_tcp.recv(512)
if len(data)>0:
print("received: %s" % data)
command=raw_input()
socket_tcp.send(command)
time.sleep(1)
continue
except exception:
socket_tcp.close()
socket_tcp=none
sys.exit(1)
Raspberry 3b 樹莓派學習記錄 3
之前的操作將樹莓派中的檔案亂改了很多,記不清原始狀態,便刷了機,結果串列埠連不上。無論我怎麼試就是不行!沒有辦法直接連顯示器,通過圖形化桌面操作簡單了很多 對於我這種用慣了windows的小白而言 原來我的系統沒有問題,害我白刷個3,4回!在直接連顯示器後發現很多介面沒有開啟 於是幾乎把所有的都開啟...
Raspberry 3b 樹莓派學習記錄 5
安裝nmap module 這幾天折騰nmap,就是想利用python實現自動掃瞄區域網ip,打算既有linuix又有windows。現在只實現了raspbian 基於linux 上nmap的安裝。找了很多的教程,包括個人部落格和官方的安裝教程,不是no module 就是nmap has no a...
raspberry 3b 遠端VNC登入
一 新增國內軟體源 raspberry pi 樹莓派 國內軟體源 先複製貼上系統本身資源列表 此操作防止自己改錯檔案無法恢復 pi raspberrypi sudo cp etc apt sources.list etc apt sources.list.bak修改配置檔案 pi raspberry...