前言
大学开学也快两个月了,现在这边是运动会。 当然,作为大学生的我当然不会参加任何运动会比赛的啦。
目前就正在整挑战杯的比赛,我也没想到我会去参加硬件这方面。 哈哈哈,就当拓宽路子了
处理
额,当然。我这边树莓派装的是官方的 x64 位系统,需要装PHP那一些,打算还是安装 x64 位系统会方便一些。 因为之前吃过了 x32 的痛苦,怎么装都装不上去。
注意:本篇文章都在 root 用户下执行,如果发现没有权限需要 su
或 sudo
进行提权操作
出现的问题
首先,更新一下
代码语言:javascript复制apt-get update
代码语言:javascript复制apt-get upgrade
我这边还是安装了,Python3,最先我试过了Python2.7发现不太行。会出现下面的一个问题 serial 库怎么都装不上。 后面呢就安装了 Python3 来处理,发现 Serial 库安装上了,但是 RPi.GPIO 库安不上了,反正两个必需品就是有一个装不上
对应的 demo.py 文件如下
代码语言:javascript复制import serial
import RPi.GPIO
尝试处理
因为现在还是 python3 开发居多,所以我果断还是选择了 python3 先卸载掉 python2.7
代码语言:javascript复制# 树莓派自带的 Python
apt remove python -y
# 由于我的 Python 是后面安装的,并不是树莓派自带的 Python 所以卸载是这个
apt remove python-is-python2 -y
安装 Python3
代码语言:javascript复制apt-get install python3
执行不需要的依赖删除
代码语言:javascript复制apt-get autoremove
通过 CSDN 一顿查询,发现有 Python3 的 RPi.GPIO 模块 我去,这不是更好。
补充安装 Python3 的 Serial 模块
利用 pip 安装 serial 毕竟我原本就用过下面这条指令,发现这个操作并不可行
代码语言:javascript复制apt-get install python-serial
他找不到,那有什么办法,只好找其他方法咯。 后面看到可以用 pip 安装,那就用这个吧 (好在不需要我怎么配置)
代码语言:javascript复制pip install pyserial
最后再一次执行 demo.py 文件,发现不会报错了,OK了。 那么环境和库文件就没问题了。
配置Arduino
ArduinoIDE
在 ArduinoIDE 软件中写入以下代码
代码语言:javascript复制void setup()
{
Serial.begin(9600); // 9600 bps
}
void loop()
{
if ( Serial.available())
{
if('s' == Serial.read())
Serial.println("Hello Raspberry,I am Arduino.");
}
}
然后直接烧录进入 Arduino 开发板中,在串口监视器输入 s 后可以直接返回结果。 证明直接在串口监视器下操作是没有问题的,也就是说这个程序是不存在问题的。
树莓派编辑 Python 页面
首先,我们需要将 Arduino 开发板与树莓派使用USB口进行链接。 随后进行查找接口
代码语言:javascript复制ls /dev/tty*
查看有没有ttyACM0 这个文件(注只有在两个硬件USB互连的情况下才会有这个。如果两者没有连接是不会有的)最新的系统一般都会自动生成。看到ttyACM0就说明二者可以通讯了
在树莓派中创建一份名字为 demo.py 的文件后输入内容
代码语言:javascript复制import serial
ser = serial.Serial('/dev/ttyACM0', 9600,timeout=1)
try:
while 1:
ser.write('s')
response = ser.readall()
print(response)
except:
print('No Result')
ser.close()
但是,在这里我发现一个致命的问题。 这个 Python 程序死活读不出来串口数据。
怎么读取都是 No Result 的结果。
后面我就抛开了树莓派的限制,直接查询 Arduino 与 Python 之间 Serial 的通信。
发现别人给的示例代码中,需要给 ser.write('s'.encode())
相当于需要编码
那么最终成型的代码如下所示
代码语言:javascript复制#!/usr/bin/python3
from base64
import decode
import serial
ser = serial.Serial('/dev/ttyACM0',9600,timeout=1)
try:
while 1:
ser.write('s'.encode())
res = ser.readall()
print(res.decode())
except:
print('No Result')
ser.close()
就可以成功用 Python3 进行输出了
页脚
说明
一篇记录文章,以前没玩过,都需要自己慢慢琢磨。 后期可能要玩到机械臂,还得先学一下 Python
引用文章
树莓派与Arduino通信 树莓派Raspberry Pi上安装和使用RPi.GPIO模块以及引脚对照表