Advertisement

arduino与python哪个语言更好,python与arduino结合项目

阅读量:

亲们好!今天就由我们的技术专家为大家解答几个关键问题。首先是关于Python语言在数据传输方面与Arduino平台之间如何配合使用?其次是大家最关心的——哪种编程语言更适合Arduino开发?——Python还是Arduino原生语言?这些问题都会在今天的分享中得到解答哦!

引言

在日常开发中,我们常常需要实现两个代码之间的通信。比如来自不同人的代码需要对接的情况非常多见。例如使用Python指令来控制Arduino控件的开关非常高效的方式就是串口通信。串口通信因其高效便捷的特点成为首选方案。下面笔者将结合自己踩过的坑来讲述下自己的学习经历快码知识

该项目的核心内容是挑战杯审报项目的一部分。具体应用了基于机器学习算法对数据进行分类处理,并集成Arduino压力传感器模块。然而由于多数采用Python编程语言实现的特点,导致实时数据传输功能受限。最终因上述原因未能完成开发任务。

图1 压力传感器模型

然后是Python能够通过Arduino的北斗模块获取位置数据;同样需要完成两个Python编程代码之间的通信Python编程代码画哆啦a梦

当时的我被这两个问题卡了好久也没有想到解决方案

感觉像是很复杂又完全没有思路

后来查阅大量资料终于得到解决

此处大概有两个重要的环节:串口通信和上位机控制

在说之前我们先要了解一下串行接口

伟大的百度百科告诉我们:

简称为串口的串行接口也可称为串行通信接口或通讯总线(常见于COM接口)。这是一种用于扩展传统并行传输方式的技术手段其工作原理是通过依次传输单个数据位来实现信息传递。其显著优势在于线路布置便捷即可完成双向数据传输即可利用电话线等常规介质作为主要传输介质极大降低了安装和维护的成本特别适合于长距离信息传递需求较高的场景但其传输速率相对较低。

(传送速度较慢这个。。。)

(反正我们就传个几KB的数据,慢就慢吧)

(手动微笑)

串口通信

使用我们的Arduino编译器界面,在操作过程中系统会提示您可以选择不同的连接端口

图2 Arduino编译器的端口

COM4在这里指的是Arduino开发板连接的串口端口。如果要通过Arduino上传代码至开发板,则需要使用该串口与之通信。

大多数人都了解Arduino板上设置了串口监视器(图右上角)以及带有Serial.print()功能。

图3 串口监视器的位置

当我们将该代码应用时,通过调用Serial.print()函数能够实现数据在串口端口上的正确传输和显示出来。

图4 Serial.print()函数结合串口监视器的描述

那么我们需要思考一个问题:

既然传过来的数据能够用Arduino来看

那么其他的软件如果能够打开的话效果就会非常好

由此我们就需要做串口通信的问题啦

--------------------------------------------------------------------------------------------------------------------------------------------------

知识链接:其实Arduino主要用于仅限于编译这一项功能,虽然串口监视也只能算是它的辅助工作。

--------------------------------------------------------------------------------------------------------------------------------------------------

一、设置串口

此处我们采用python打开这个串口以实现串口通信

编译器使用pyCharm

首先安装pyserial

图5 安装pyserial

(万能的pip install真好用)

pyserial的作用在于提供一个从串口读取信息的接口

现在我们已经拥有串口通信的基础了

赶紧把包导进来(注意使用import serial而不是import pyserial)

这里介绍一个基本函数serial.Serial(a,b,c)来设置一个串口

a为一个字符串代表串口的位置(如COM3)

b为一个数字代表波特率

需要注意的是,在Arduino中使用Serial.begin()时,其配置内容必须与所读取的波特率保持一致。

c为超时的时间,单位为s

初始化如图所示

图6 串口设置与初始化

此处的意义是打开一个名字叫COM1的串口,以9600波特率,0.5秒作为超时

二、读取信息

采用readline函数以读取一列数据

由于此处我们定义的变量是ser

所以下面也同样使用ser

即ser.readline()函数

下面贴出代码

首先是python端代码

图7 python端代码和运行结果(由于此处我是COM4串口就设置的是COM4)

复制代码
     1import serial
     2 3 4"COM4"# 串口 5# 波特率 6)
     7print"参数设置:串口=%s ,波特率=%d" (serialPort, baudRate))
     8 910while:
    11 ser.readline()
    12print(str)
    1314

然后是Arduino端代码

复制代码
    1void setup(){
    29600);
    3}
    4void loop(){
    5"Hello,World!\n");
    6

至此

Arduino端向python端传输数据已经完成

上位机控制

由于Arduino的控制很有可能需要其他代码传送运行结果给它

所以上位机对于Arduino的控制也是十分有意义的

利用上位机的控制

我们能够实现代码直接控制开关的结果

例如输入一个数然后开关打开灯亮

此处我们就采用这个作为Model

一、Arduino函数介绍

此处要介绍三个新的函数Serial.read() Serial.available() pinMode()

1.Serial.read()

这个函数的作用在于从COM接口读取一个字节的数据

2.Serial.available()

这个函数的作用在于查看COM接口是否有数据读入

3.pinMode((串口号),OUTPUT) 将一个端口设置为输出口

有了这两个函数过后接下来会简单很多

二、接口实现

Arduino端口

我们需要实现以下功能:

1.灯原来亮

2.按下0后灯灭

3.按下1后灯亮

首先我们需要向Arduino芯片内写入代码

但有一点需要注意

如果要将二极管LED直接接到接口上的话只能接13号接口

因为13号接口自带正好适合LED的电阻

有了上面的基础

我就直接贴代码了

附带详细注释哦

复制代码
     1void setup(){
     29600);
     313//设置13号端口作为输出端口 413//让灯开始时亮 5}
     6charvar;
     7void loop(){
     8while0//当有信号的时候 9  {
    10varSerial.read();
    11ifvar'0'//传过来的是01213,LOW);
    13ifvar'1'//传过来的是11413,HIGH);
    15  }
    16

python端口

此处python接口采用serial中的write函数来向串口中写入数据

注意一下输入的一定要是ASCII字符

否则Arduino接口无法读出的

复制代码
     1# -*- coding: utf-8 -*- 2import serial
     3 4"COM4"# 串口 5# 波特率 6)
     7print"参数设置:串口=%s ,波特率=%d" (serialPort, baudRate))
     8 9"0"#将0转换为ASCII码方便发送10"1"#同理11while:
    12'请输入指令:')
    13#将c转换为UTF-8标准数字14if):
    15#ser.write在于向串口中写入数据16if):
    17

运行结果如下:

图8 输入0时关闭

图 9 输入1时打开

------------------------------------------------------------------------------------------------------------------------------------------------------

几点注意事项:

1.接口不一定统一

在其中的具体内容中,笔者主要根据个人理解进行描述。如有不当之处恳请大家批评指正。

3.Arduino真是太好玩了

如果各位大佬觉得笔者这篇写的还算可以的话欢迎打赏哦

2018-12-31 01:26:53 Author:Lance Yu

转载于:https://www.cnblogs.com/lanceyu/p/10201236.html

全部评论 (0)

还没有任何评论哟~