使用串口通过 Arduino 将多个值发送到 Raspberry

2024-03-28

我有一个关于 Arduino 和 Raspberry Pi 之间串行通信的问题。事实上,我想使用 Arduino 将 2 个变量发送到 Raspberry Pi,并以不同的方式使用它们。

这是我的 Arduino 草图:

int one = 1;
int two = 2;

void setup() 
{

     Serial.begin(9600);
}

void loop() 
{
   Serial.print(one);
   Serial.print(two);
   delay(3000);

}

这是我的 Raspberry 的 python 脚本:

import serial
import time

ser = serial.Serial('/dev/ttyACM0', 9600)
time.sleep(4)

while True:
    data=ser.read()
    print data

问题是 python 代码中的“数据”采用 Arduino 发送的两个值(因为 Arduino Loop() 中有两个打印)。但我想用两个不同的变量接收 Raspberry Pi 中的数据(以便在之后记录它们)。我尝试了很多技术以两种不同的方式接收这些数据,但它不起作用。

感谢您的帮助。


阿杜诺的Serial.print https://www.arduino.cc/en/Serial/Print以 ASCII 形式发送数据。 所以你的 Arduino 命令实际上发送了字符串12。 Python 无法看到第一个值在哪里结束以及第二个值在哪里开始。

一种解决方案是使用Serial.println https://www.arduino.cc/en/Serial/Println代替Serial.print。 这将在每次调用后添加回车符和换行符。 所以字符串会变成1\r\n2\r\n.

在 Python 端,您可以使用split方法。 IPython 中的示例:

In [1]: recv = "1\r\n2\r\n"

In [2]: recv.split()
Out[2]: ['1', '2']

然后您可以轻松地将这些值转换为整数。

In [3]: [int(j) for j in recv.split()]
Out[3]: [1, 2]

Note:Python 可能会收到不完整的消息!所以你可能会收到字符串1当你第一次阅读并且2在第二次阅读时!因此,您可能需要考虑格式化数据,以便know您已收到完整的消息。

一种选择是将数据格式化为 JSON。在你的例子中,这将是{"one": 1, "two": 2}。在这个简单的呼叫中,您可以检查您是否收到了完整的消息,因为它以{并以}。但您也可以使用 Python 的内置 JSON 解析器。

In [4]: data = {'one': 1, 'two': 2}

In [5]: import json

In [6]: json.dumps(data)
Out[6]: '{"two": 2, "one": 1}'

In [7]: recv2 = json.dumps(data)

In [8]: json.loads(recv2)
Out[8]: {'one': 1, 'two': 2}

使用 JSON 解析器有一个优点,因为当您尝试解析不完整的消息时它会引发异常:

In [10]: recv2
Out[10]: '{"two": 2, "one": 1}'

In [11]: recv3 = '{"two": 2, "on'

In [12]: json.loads(recv3)
---------------------------------------------------------------------------
JSONDecodeError                           Traceback (most recent call last)
<ipython-input-12-c1774b41dafa> in <module>()
----> 1 json.loads(recv3)

/usr/local/lib/python3.5/json/__init__.py in loads(s, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
    317             parse_int is None and parse_float is None and
    318             parse_constant is None and object_pairs_hook is None and not kw):
--> 319         return _default_decoder.decode(s)
    320     if cls is None:
    321         cls = JSONDecoder

/usr/local/lib/python3.5/json/decoder.py in decode(self, s, _w)
    337 
    338         """
--> 339         obj, end = self.raw_decode(s, idx=_w(s, 0).end())
    340         end = _w(s, end).end()
    341         if end != len(s):

/usr/local/lib/python3.5/json/decoder.py in raw_decode(self, s, idx)
    353         """
    354         try:
--> 355             obj, end = self.scan_once(s, idx)
    356         except StopIteration as err:
    357             raise JSONDecodeError("Expecting value", s, err.value) from None

JSONDecodeError: Unterminated string starting at: line 1 column 12 (char 11)

处理这个问题的正确方法是不断从串口读取数据并将其附加到字符串中,直到解析数据不失败为止;

import serial
import json
import time

ser = serial.Serial('/dev/ttyACM0', 9600)

buffer = ''
while True:
    buffer += ser.read()
    try:
        data = json.loads(buffer)
        print(data)
        buffer = ''
    except json.JSONDecodeError:
        time.sleep(1)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用串口通过 Arduino 将多个值发送到 Raspberry 的相关文章

  • Python:我可以修改元组吗?

    我有一个 2 D 元组 实际上我以为 它是一个列表 但错误说它是一个元组 但无论如何 该元组的形式为 浮点数 val prod id 现在我有一个字典 其中包含 key gt prod id 和 value prod name 现在 我想将
  • python列表理解和extend() [重复]

    这个问题在这里已经有答案了 深入学习 Python 2 7 1 但未能理解这一点 几个小时 gt gt gt a 1 2 gt gt gt b 3 4 gt gt gt gt gt gt a extend b 0 gt gt gt a 1
  • Python中的键盘可中断阻塞队列

    It seems import Queue Queue Queue get timeout 10 键盘可中断 ctrl c 而 import Queue Queue Queue get 不是 我总是可以创建一个循环 import Queue
  • 使用 Python 连接从 FTP 检索文件

    我构建了这个简单的工具来暴力破解并连接到 ftp 服务器 import socket import ftplib from ftplib import FTP port 21 ip 192 168 1 108 file1 passwords
  • 我可以将 RegExp 和 Function 存储在 JSON 中吗?

    给定一个像这样的块 var foo regexp http fun function 将其存储在 JSON 中的正确方法是什么 您必须将 RegExp 作为字符串存储在 JSON 对象中 然后您可以从字符串构造一个 RegExp 对象 JS
  • 使用自定义元素类在 Python 中解析 xml

    我想使用 Python 的 xml etree ElementTree 模块解析 xml 文档 但是 我希望生成的树对象中的所有元素都具有我定义的一些类方法 这建议创建我自己的 Python 元素类的子类 但我无法告诉解析器在解析时使用我自
  • 使用 boto 和 python 从带有参数的布局创建 mTurk HIT

    我正在尝试利用 boto 在 Mechanical Turk 中生成 HIT 目标是使用我的 mTurk 帐户上已生成的通用布局 并向其传递图像 URL 以迭代创建 HIT 问题是 即使正确命名参数 如果图像 url boto 也不成功 我
  • Python lmfit:拟合 2D 模型

    我正在尝试将二维高斯拟合到一些灰度图像数据 该数据由一个二维数组给出 lmfit 库实现了一个易于使用的模型类 它应该能够做到这一点 不幸的是文档 http lmfit github io lmfit py model html http
  • 使用底图和Python在地图中绘制海洋

    我正在绘制此处提供的 netCDF 文件 https goo gl QyUI4J https goo gl QyUI4J Using the code below the map looks like this 然而 我希望海洋是白色的 更
  • 没有名为 objc 的模块

    我正在尝试将 cocoa python 与 Xcode 一起使用 但它总是会出现错误 Traceback most recent call last File main py line 10 in
  • C# - 如何在变量名中使用无效字符

    在 C 中 我正在构建一个类 出于讨论目的而在此处进行了简化 该类最终将被序列化为一些外部定义的 JSON schema http example com person json name John age 86 在我的代码中我会有类似的内
  • 让垂直网格线出现在 matplotlib 的线图中

    我想在绘图上同时获得水平和垂直网格线 但默认情况下仅显示水平网格线 我正在使用一个pandas DataFrame从 python 中的 sql 查询生成 x 轴上带有日期的线图 我不知道为什么它们没有出现在日期上 我试图寻找这个问题的答案
  • 插入失败“OperationalError:没有这样的列”

    我尝试使用我尝试修复的姓名和电话创建一个数据库 但它会随时向我重播 File exm0 py line 14 in
  • 来自字典列表列表的 Pandas DataFrame

    我有一个数据结构 它是字典列表的列表 Height 86 Left 1385 Top 215 Width 86 Height 87 Left 865 Top 266 Width 87 Height 103 Left 271 Top 506
  • 为什么这个记忆器适用于递归函数?

    我不明白为什么下面的代码是这样的fib以线性而非指数时间运行 def memoize obj Memoization decorator from PythonDecoratorLibrary Ignores kwargs cache ob
  • 如何通过pygit2获取当前签出的Git分支名称?

    这个问题应该与 如何获取Git中当前的分支名称 https stackoverflow com questions 6245570 how to get current branch name in git 获取 git 当前分支 标签名称
  • Mac OS 上的 pybluez 安装错误

    我尝试安装pybluez使用以下命令 pip install pybluez sudo easy install pybluez 但对于这两个命令我最终都会出错 环境 Mac OSX 10 9 1 Python 2 7 点日志 cc fno
  • 尝试输入字符串时出现名称错误[重复]

    这个问题在这里已经有答案了 import pickle import os import time class Person def init self number address self number number self addr
  • Python 中的“lambda”是什么意思,最简单的使用方法是什么?

    您能否给出一个示例和其他示例来说明何时以及何时不使用 Lambda 我的书给了我一些例子 但它们很令人困惑 拉姆达 起源于拉姆达演算 http en wikipedia org wiki Lambda calculus和 AFAIK 首先实
  • 如何在Python中检查元组是否包含元素?

    我试图找到可用的方法 但找不到 没有contains 我应该使用index 我只想知道该项目是否存在 不需要它的索引 You use in if element in thetuple whatever you want to do

随机推荐

  • Bootstrap 3:导航栏形式的输入组占据整个宽度

    这就是 bootstrap 的导航栏形式的样子 默认 HTML 为
  • 多个 Grok 过滤器不存储第一个过滤器匹配记录

    我正在使用 Logstash 来解析 postfix 日志 我主要关注从后缀日志获取退回的电子邮件日志 并将其存储在数据库中 为了获取日志 首先我需要找到 postfix 生成的与我的消息 ID 相对应的 ID 然后使用该 ID 我需要查找
  • 如何在 Android Studio 中实现 Google Distance/Matrix Api?

    我正在编写一个应用程序来计算路线中的两个位置 我已经实现了 google place API 来根据名称或地址获取纬度 经度 但我无法实现距离 API 当我尝试导入时 类 方法不会出现 下面是我正在尝试做的事情的一个例子 private s
  • `unique_ptr< T const [] >` 应该接受 `T*` 构造函数参数吗?

    Code include
  • 在 SWIG 接口中忽略 __attribute__((packed)) 总是安全的吗?

    由于 SWIG 无法解析 attribute packed 在我想要包装的一些 C 结构上 我通过放置一个来解决这个问题 define attribute x in my i file 这东西什么时候才会来咬我 这实际上是完全理智的 SWI
  • 右键单击 NSStatusItem

    我有一个NSStatusItem我想通过右键单击该项目来弹出一个菜单 我对 NSView 进行了子类化并覆盖了 void rightMouseDown NSEvent event方法 我也实施了 void mouseDown NSEvent
  • 如何在 laravel 背包中指定 IN 子句?

    我如何添加INlaravel 中的背包条款 这就是我正在寻找的 this gt crud gt addClause where customer id in 1 3 5 6 7 应该翻译成这样 select from customer wh
  • HttpWebRequest 抛出 404 异常

    我发现 HttpWebRequest 对不存在的资源抛出 WebException 在我看来 这很奇怪 因为 HttpWebResponse 有 StatusCode 属性 NotFount 项存在 您认为这有什么原因吗 或者这只是开发人员
  • 为什么 .append() 方法不适用于字符串,它们的行为不像列表吗?

    即使字符串实际上是字符常量列表 为什么此语句会产生错误 string name string name append hello word 我希望它能起作用的原因是 当我们使用 for 循环时 我们可以使用以下语句 for i in str
  • 方案按引用传递

    如何在方案中通过引用传递变量 我想要的功能的示例 define foo lambda x set x 5 define y 2 foo y display y outputs 5 另外 有没有办法通过引用返回 See http commun
  • oAuth 实现:当前域重要吗?

    我是一名前端开发人员 帮助用户体验团队开发浏览器插件的界面 该插件基于 HTML CSS JS 需要身份验证 目前 我们的线路中有标准的 u p 字段 但客户想知道是否可以进行社交登录 由于插件的接口被注入到用户访问的每个页面中 这意味着身
  • “copyfiles”是标准的 Ant 任务吗?

    我有一个 NetBeans 项目 我正在尝试从命令行手动编译ant 当在安装了 NetBeans 的同一台计算机上运行时 它可以完美运行 但是 如果我跑ant在中央持续集成服务器 未安装 NetBeans 上 它在
  • WordPress 获取自定义帖子类型的分类列表

    我正在为我的 WordPress 网站使用 视频 主题 在此主题中 定义了视频帖子类型和 视频类别 分类法 这是分类法的注册代码 add action init custom posttype menu wp admin1 function
  • 状态模式与 ENUM

    有时需要支持对象的状态 据我了解有两种方法 枚举 简单 STATE模式 OC原理 显然需要使用状态模式来达到这样的目的 我不确定 但是阅读其他代码时 我经常遇到的只是枚举而不是状态模式 状态模式有权力吗 通常 ENUM 方法涉及某种状态和转
  • 在保护模式下读取键盘

    我正在尝试制作 PS 2 键盘控制器 但无法正常工作 outb 0x60 0xED outb 0x60 2 Turn on CapsLock LED doesn t works char c 0 while c 1 if inb 0x60
  • 如何正确清除singleTop Activity中的意图数据?

    场景是 在清单中声明了 singleTop 的活动 这个活动被称为带有一些额外的内容 我能够清除意图数据并能够翻转屏幕等 而无需调用原始意图 问题是 当系统终止该活动并且用户返回该活动时 它会使用创建该活动的原始意图重新启动 我该如何删除这
  • 获取用于 Azure Web PubSub Rest API 的 JWT 承载令牌进行身份验证

    我正在开发一个项目 其中我通过 Azure Web PubSub 服务构建一个发布 订阅系统 JavaScript 客户端 订阅者 通过套接字连接 能够接收 Hub 上和 Group 中发布的消息 为此 我遵循了本教程 https lear
  • 如何指定浮点数的舍入模式?

    我想将浮点数四舍五入到最接近的整数 当存在 最接近的整数 时 趋向正无穷大 use std num Float fn main assert eq 0 0 0 5 round fails 但是 文档round say 将中途情况舍入到远离
  • Windows XP 性能监视器应用程序 (perfmon) 中缺少处理器/内存计数器

    Perfmon 是一个 Windows 实用程序 可通过测量系统计数器帮助开发人员找到应用程序中的瓶颈 我正在读一本性能监控教程 http adminfoo net 2007 04 windows perfmon top ten count
  • 使用串口通过 Arduino 将多个值发送到 Raspberry

    我有一个关于 Arduino 和 Raspberry Pi 之间串行通信的问题 事实上 我想使用 Arduino 将 2 个变量发送到 Raspberry Pi 并以不同的方式使用它们 这是我的 Arduino 草图 int one 1 i