「电子」树莓派4B与Arduino开发板通信

2022-11-12 14:04:04 浏览数 (1)

前言

大学开学也快两个月了,现在这边是运动会。 当然,作为大学生的我当然不会参加任何运动会比赛的啦。

目前就正在整挑战杯的比赛,我也没想到我会去参加硬件这方面。 哈哈哈,就当拓宽路子了

处理

额,当然。我这边树莓派装的是官方的 x64 位系统,需要装PHP那一些,打算还是安装 x64 位系统会方便一些。 因为之前吃过了 x32 的痛苦,怎么装都装不上去。

注意:本篇文章都在 root 用户下执行,如果发现没有权限需要 susudo 进行提权操作

出现的问题

首先,更新一下

代码语言: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模块以及引脚对照表

0 人点赞