Raspberry 3b 樹莓派學習記錄 4

2021-09-18 01:33:56 字數 3619 閱讀 2318

參考: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...