树莓派4B Python开发环境搭建

本文详细介绍了如何在树莓派4B上搭建开发环境,包括安装Raspbian操作系统,配置网络(WiFi和有线),更换国内软件源,升级wiringPi到2.52,设置VNC远程连接,删除默认Python2.7并链接Python3,更新pip源,安装wxPython,以及常用软件安装。此外,还涉及到了Python脚本开机自启,SSH反向代理,以及通过snap7库连接西门子PLC的操作步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

树莓派4B 开发环境搭建

一.OS安装和设置

raspbian 操作系统安装

下载刷sd卡的工具

https://www.raspberrypi.org/software/

下载镜像

https://www.raspberrypi.org/software/operating-systems/#raspberry-pi-os-32-bit

安装好工具后,运行工具,并选择下载好的镜像,刷到一张16G以上SD卡里,刷完将卡装到树莓派里,连上键盘鼠标和显示器,上电启动即可。

配置网络

a. wifi配置, 

1.图形界面,可以直接在任务面板上选择.

2.修改配置文件

pi@raspberrypi:/ $ vi /etc/wpa_supplicant/wpa_supplicant.conf 


#加入下面设备
network={
        ssid="test"    #wifi 名称
        psk="password" #wifi 密码
        key_mgmt=WPA-PSK
}

b.有线网络配置

1.图形方式

 

2.修改配置文件方式

pi@raspberrypi:/ $ vi /etc/dhcpcd.conf 

#加入以下内容

interface eth0
static ip_address=192.168.1.99
static routers=
static domain_name_servers=
static domain_search=

修改apt软件源为国内源(清华)

sudo vi /etc/apt/sources.list
# 编辑 `/etc/apt/sources.list` 文件,删除原文件所有内容,用以下内容取代:
deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib rpi
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib rpi


sudo vi /etc/apt/sources.list.d/raspi.list
# 编辑 `/etc/apt/sources.list.d/raspi.list` 文件,删除原文件所有内容,用以下内容取代:
deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui

 更新wiringpit版本到2.52, 使 gpio readall 正常运行

#显示 Pi 4B的针脚图,默认有错误
pi@raspberrypi:~ $ gpio  readall
Oops - unable to determine board type... model: 17

#因为gpio的版本不是最新的,4b需要 2.52支持
pi@raspberrypi:~ $ gpio -v
gpio version: 2.50
Copyright (c) 2012-2018 Gordon Henderson
This is free software with ABSOLUTELY NO WARRANTY.
For details type: gpio -warranty

Raspberry Pi Details:
  Type: Unknown17, Revision: 04, Memory: 0MB, Maker: Sony 
  * Device tree is enabled.
  *--> Raspberry Pi 4 Model B Rev 1.4
  * This Raspberry Pi supports user-level GPIO access.


#直接用apt-get更新不行,只能到2.50
pi@raspberrypi:~ $ sudo apt-get install wiringpi
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
wiringpi 已经是最新版 (2.50)。
升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 65 个软件包未被升级。


#要单独下载wiringpi最新版下载
pi@raspberrypi:/tmp $ cd /tmp
pi@raspberrypi:/tmp $ wget https://project-downloads.drogon.net/wiringpi-latest.deb
pi@raspberrypi:/tmp $ sudo dpkg -i wiringpi-latest.deb
(正在读取数据库 ... 系统当前共安装有 100025 个文件和目录。)
准备解压 wiringpi-latest.deb  ...
正在解压 wiringpi (2.52) 并覆盖 (2.50) ...
正在设置 wiringpi (2.52) ...
正在处理用于 man-db (2.8.5-2) 的触发器 ...

#OK 可对了。

pi@raspberrypi:/tmp $ gpio readall
 +-----+-----+---------+------+---+---Pi 4B--+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 |     |     |    3.3v |      |   |  1 || 2  |   |      | 5v      |     |     |
 |   2 |   8 |   SDA.1 | ALT0 | 1 |  3 || 4  |   |      | 5v      |     |     |
 |   3 |   9 |   SCL.1 | ALT0 | 1 |  5 || 6  |   |      | 0v      |     |     |
 |   4 |   7 | GPIO. 7 |   IN | 1 |  7 || 8  | 1 | ALT5 | TxD     | 15  | 14  |
 |     |     |      0v |      |   |  9 || 10 | 1 | ALT5 | RxD     | 16  | 15  |
 |  17 |   0 | GPIO. 0 |   IN | 0 | 11 || 12 | 0 | IN   | GPIO. 1 | 1   | 18  |
 |  27 |   2 | GPIO. 2 |   IN | 0 | 13 || 14 |   |      | 0v      |     |     |
 |  22 |   3 | GPIO. 3 |   IN | 0 | 15 || 16 | 0 | IN   | GPIO. 4 | 4   | 23  |
 |     |     |    3.3v |      |   | 17 || 18 | 0 | IN   | GPIO. 5 | 5   | 24  |
 |  10 |  12 |    MOSI |   IN | 0 | 19 || 20 |   |      | 0v      |     |     |
 |   9 |  13 |    MISO |   IN | 0 | 21 || 22 | 0 | IN   | GPIO. 6 | 6   | 25  |
 |  11 |  14 |    SCLK |   IN | 0 | 23 || 24 | 1 | IN   | CE0     | 10  | 8   |
 |     |     |      0v |      |   | 25 || 26 | 1 | IN   | CE1     | 11  | 7   |
 |   0 |  30 |   SDA.0 |   IN | 1 | 27 || 28 | 1 | IN   | SCL.0   | 31  | 1   |
 |   5 |  21 | GPIO.21 |   IN | 1 | 29 || 30 |   |      | 0v      |     |     |
 |   6 |  22 | GPIO.22 |   IN | 1 | 31 || 32 | 0 | IN   | GPIO.26 | 26  | 12  |
 |  13 |  23 | GPIO.23 |   IN | 0 | 33 || 34 |   |      | 0v      |     |     |
 |  19 |  24 | GPIO.24 |   IN | 0 | 35 || 36 | 0 | IN   | GPIO.27 | 27  | 16  |
 |  26 |  25 | GPIO.25 |   IN | 0 | 37 || 38 | 0 | IN   | GPIO.28 | 28  | 20  |
 |     |     |      0v |      |   | 39 || 40 | 0 | IN   | GPIO.29 | 29  | 21  |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+---Pi 4B--+---+------+---------+-----+-----+


vnc 设置

通过 realvncview 软件可以 远程连接 pi ,这样实际码代码可以在电脑上做,调试或发布时才把代码复制到pi. 

pi 里打开 vncserver

   

电脑上装vncview就能连上了(确保电脑和pi的网络是通的,用pi的ip地址连)

 

二.Python设置

删除默认的python2.7版本

#删除版本
sudo apt-get autoremove python2.7

#将常用版本,链接为python
sudo ln -s /usr/bin/python3.7 /usr/bin/python

#同时将pip也改过来
sudo ln -s /usr/bin/pip3 /usr/bin/pip

 

更新pip源

#临时改为清华源,并更新pip
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pip -U

#更新pip源(会自动改pip的配置文件)
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

安装wxpyhon:  

正常用pip并不能安装上wxpython,有可能版本不兼容的问题. 可以用树莓派的软件管理,直接安装.

也可以直接在 wxpython 官网上载 后安装 https://extras.wxpython.org/wxPython4/extras/linux/gtk3/debian-10/ 

下载 demo   https://extras.wxpython.org/wxPython4/extras/4.0.4/

三.常用软件安装

如果下载的镜像里没选(recommanded)装机推荐软件,可以在菜单里再安装即可(注意前面改apt的源要做,否则连国外源非常慢)

安装虚拟键盘(下面是用命令安装,同理也可以 add/remove software 界面里安装)

sudo apt-get install matchbox-keyboard

#如果出现键盘乱码,需要安装中文包
sudo apt-get install ttf-wqy-zenhei

 获取SD卡ID 方法

cat /sys/block/mmcblk0/device/cid # linux2.6.26 后标记过时

cat /sys/class/block/mmcblk0/device/cid   #目前最合适的方法

cat /sys/class/mmc_host/mmc0/mmc0:1234/cid

#上面都是链接到这个设备
cat  /sys/devices/platform/soc/3f202000.mmc/mmc_host/mmc0/mmc0:1234/cid
cat  /sys/devices/platform/soc/3f202000.mmc/mmc_host/mmc0/mmc0:1234/block/mmcblk0/device/cid
#!/bin/zsh
#取网卡地址
mac=`ssh pi@192.168.3.39 "/sbin/ifconfig -a" |grep ether |awk '{printf "%s", $2}'`
#ssh pi@192.168.3.39 "/sbin/ifconfig -a" |grep ether |awk '{mac= $2}'
#Cpu serial
cpu=`ssh pi@192.168.3.39 "cat /proc/cpuinfo" |grep Serial |awk '{print $3}'`
#取SD卡序列号
sd=`ssh pi@192.168.3.39 "cat /sys/class/block/mmcblk0/device/cid"`
print $mac,$cpu,$sd
#1.开机自动运行  p.py

pi@raspberrypi3b:~/dev $ sudo vi /etc/rc.local 

#在exit 0 前加如下格式行。

...略...
sudo su pi -c "/bin/python  /home/pi/p.py "
exit 0


#2. rc.local 只能在3b用,4b已经失效。可以改 /etc/profile 实现自动启动。

pi@raspberrypi:~ $ sudo vi /etc/profile
#在最后面添加以下

...略...
pyid=$(ps aux | grep 'python /home/pi/p.py' | grep -v grep | awk '{print $2}')
if [ $pyid ]; then
  echo file started   $pyid
else
  python /home/pi/p.py&
fi
# 反向代理:实现通过访问 x.x.x.x:9999就是访问树莓派的5900
#在树莓派执行
sudo ssh -NfR 9999:localhost:5900 xulong@x.x.x.x 
# 在 x.x.x.x 配置 
vim /etc/ssh/sshd_config   
GatewayPorts yes
#X11Forwarding no

#在树莓派生成key , 私密放在.ssh  公钥加入 x.x.x.x /.ssh/authorized_keys
#实现 从树莓派 到 x.x.x.x 的ssh连接免密码输入
ssh-keygen -t rsa
#id_rsa : put to client .ssh
#id_rsa.pub : put to server .ssh  and   cat id_rsa.pub >> authorized_keys



#查找代理进程
ps -aux |grep 'ssh -NfR'

#杀掉代理进程
kill $(ps aux | grep 'ssh -NfR' | grep -v grep | awk '{print $2}')



#自动填密码,连接服务器,并实现本地的反向代理

#!/bin/bash
pass='password'
/usr/bin/expect << EOF
set timeout 30
spawn  ssh -NfR 9999:localhost:22 help@server -p  8888
expect {
        "(yes/no)" {send "yes\r"; exp_continue}
        "password:" {send "$pass\r"}
        "*@*"       {send "exit\r"}
}
expect eof 
EOF

西门子plc的读写,可以用 snap7库,参考官网: http://snap7.sourceforge.net/

#西门子plc的连接
#下载 snap7
# https://sourceforge.net/projects/snap7/files/1.4.1/
# snap7-full-1.4.1.tar.gz

#copy 到树莓派里,解压然后编译 

pi@dev:~/snap7-full-1.4.2/build/unix $ pwd
/home/pi/snap7-full-1.4.2/build/unix

pi@dev:~/snap7-full-1.4.2/build/unix $ ls
arm_v6_linux.mk  i386_bsd.mk         i386_solaris_gcc.mk  x86_64_bsd.mk         x86_64_solaris_gcc.mk
arm_v7_linux.mk  i386_linux.mk       mips_linux.mk        x86_64_linux.mk
common.mk        i386_solaris_cc.mk  README.txt           x86_64_solaris_cc.mk

#可以看到,arm 有v6 v7两个版本, 这时要查一下当前树莓派的cpu型号。
pi@dev:~/snap7-full-1.4.2/build/unix $ lscpu
Architecture:        armv7l   <<<<<<<<<<<<<<<<<<<<<<<<<<
Byte Order:          Little Endian
CPU(s):              4
On-line CPU(s) list: 0-3
Thread(s) per core:  1
Core(s) per socket:  4

#知道是v7版的,那么,编译时选相应的编译文件 (arm_v7_linux.mk)
pi@dev:~/snap7-full-1.4.2/build/unix $ make -f arm_v7_linux.mk all

g++ -c  "../../src/sys/snap_msgsock.cpp" -O3 -g -fPIC -mword-relocations -pedantic -o ../temp/arm_v7/sys_snap_msgsock.o -I. -I../../src/sys -I../../src/core -I../../src/lib 
g++ -c  "../../src/sys/snap_sysutils.cpp" -O3 -g -fPIC -mword-relocations -pedantic -o ../temp/arm_v7/sys_snap_sysutils.o -I. -I../../src/sys -I../../src/core -I../../src/lib 


#编译完后,在build/bin目录找到相应cpu平台目录,就有编译完成的相应库文件了。
pi@dev:~/snap7-full-1.4.2/build/bin/arm_v7-linux $ pwd
/home/pi/snap7-full-1.4.2/build/bin/arm_v7-linux
pi@dev:~/snap7-full-1.4.2/build/bin/arm_v7-linux $ ls
libsnap7.so

#复制库文件到 /usr/lib
pi@dev:~/snap7-full-1.4.2/build/bin/arm_v7-linux $ cp libsnap7.so  /usr/lib

#重建库文件配置(注意要执行要不然,后面会出现还是找不到这个库文件的问题,会提示你要执行的)
pi@dev:~/snap7-full-1.4.2/build/bin/arm_v7-linux $ sudo ldconfig 


# pip 安装 python-snap7
pi@dev:~/snap7-full-1.4.2/build/bin/arm_v7-linux $ pip install python-snap7
Defaulting to user installation because normal site-packages is not writeable
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple, https://www.piwheels.org/simple
Collecting python-snap7
  Downloading https://www.piwheels.org/simple/python-snap7/python_snap7-1.0-py3-none-any.whl (27 kB)
Installing collected packages: python-snap7
Successfully installed python-snap7-1.0

#至此python就能正常连接西门子plc了。可以测试一下,库安装完整。
pi@dev:~/snap7-full-1.4.2/build/bin/arm_v7-linux $ python
Python 3.7.3 (default, Jul 25 2020, 13:03:44) 
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import snap7
>>> plc = snap7.client.Client()
>>> 

 

### 配置树莓派4B GPIO引脚的开发环境 #### 安装必要的软件包 为了能够顺利操作GPIO接口,在开始之前需要确保已经安装了`wiringPi`库以及Python的相关模块。可以通过以下命令来完成这些依赖项的安装: ```bash sudo apt-get update sudo apt-get install python3-pip git wiringpi pip3 install RPi.GPIO ``` 上述命令会更新系统的软件源列表并安装用于控制GPIO口所需的工具和库文件[^1]。 #### 设置工作空间 创建一个新的项目目录,并进入该目录下准备编写测试程序: ```bash mkdir ~/gpio_test && cd ~/gpio_test ``` 这一步骤有助于保持项目的整洁有序,同时也方便后续管理和维护代码文件[^2]。 #### 编写简单的LED闪烁程序 下面是一个利用Python编写的简单例子,它可以让连接到指定GPIO管脚上的LED每隔一秒交替亮灭一次。将此段代码保存为名为`blink.py`的文件: ```python import RPi.GPIO as GPIO import time def setup(): global pin pin = 11 # 使用BOARD编号体系下的第11号物理针脚 GPIO.setmode(GPIO.BOARD) GPIO.setup(pin, GPIO.OUT) try: setup() while True: print(f"Turning LED on at {time.strftime('%H:%M:%S')}") GPIO.output(pin, GPIO.HIGH) time.sleep(1) print(f"Turning LED off at {time.strftime('%H:%M:%S')}") GPIO.output(pin, GPIO.LOW) time.sleep(1) except KeyboardInterrupt: pass finally: GPIO.cleanup() # 清理使用的资源 ``` 这段代码展示了如何初始化GPIO端口、定义循环逻辑使LED按照设定的时间间隔改变状态,并且包含了异常处理机制以确保当用户中断执行时可以安全退出而不影响硬件设备的状态。 #### 运行测试程序 通过终端运行刚才编辑好的Python脚本即可看到实际效果: ```bash python3 blink.py ``` 如果一切正常的话,应该可以看到与之相连的小灯泡每秒钟切换一次亮度变化。注意这里假设读者已经完成了基本电路搭建并将LED正极接到所选GPIO引脚上,负极则需经过适当限流电阻接地线。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wxgnolux

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值