1.  python 工具

OS: ubuntu 16.04

树莓派的串口私下认可为串口终端调节和测试使用,如要平常使用串口则须要修改树莓派设置。关闭串口终端调节和测试作用后则不能够再经过串口登陆拜会树莓派,需从新开启后才能透过串口控制树莓派。

转:

#coding = utf-8

import pty
import os
import select

def mkpty():
    master1, slave = pty.openpty()
    slaveName1 = os.ttyname(slave)
    master2, slave = pty.openpty()
    slaveName2 = os.ttyname(slave)
    print '\nslave device names: ', slaveName1, slaveName2
    return master1, master2

if __name__ == "__main__":
    master1, master2 = mkpty()
    while True:
        rl, wl, el = select.select([master1, master2], [], [], 1)
        for master in rl:
            data = os.read(master, 128)
            print "read %d data." %len(data)
            if master == master1:
                os.write(master2, data)
            else:
                os.write(master1, data)

ROS:kinetic

一 、设置串口

 

选取方法:

1.安装arduino  sudo apt-get install arduino

要利用这一个串口,必须先实行安装:

树莓派是不是能够利用串口呢,答案是必然的 ,以下是具体方法

 

1.树莓派的率先排的第2,四,多个分级,也正是下图的6,8,10四个端口分别是地,TX与兰德普拉多X,与被连接装置连接起来。注意树莓派的TX要连接从设备的景逸SUVX,树莓派的汉兰达X要一而再树莓派的TX澳门金沙国际 1

 

2.树莓派上唯有二个串口,系统暗许将它作为调节和测试口,所以不可能一贯当成普通串口举行编制程序和动用,要求先将调节和测试口的配备去掉,再选拔。此处须求修改两处文件

  2.1  修改      在极限输入如下指令 

[plain] view
plaincopyprint?澳门金沙国际 2澳门金沙国际 3

  1. sudo nano /boot/cmdline.txt  

    sudo nano /boot/cmdline.txt

      打开后将高粱红部分删除

dwc_otg.lpm_enable=0 console=ttyAMA0,115200
kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4
elevator=deadline rootwait

      删除后,变成如下结果保存退出

dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4
elevator=deadline rootwait

 

 2.2  修改 /etc/inittab

   在极限输入如下指令 

[plain] view
plaincopyprint?澳门金沙国际 4澳门金沙国际 5

  1. sudo nano /etc/inittab  

    sudo nano /etc/inittab

  打开后将最终一行注释掉 在头里加上一个#号即可

 #T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

 

 

3.修改完毕后,需求在树莓派上设置一个minicom,那里的minicom是Linux平台的串口调节和测试工具,相当于Windows上的串口调节和测试助手

   3.1  安装minicom,输入以下命令

 

[plain] view
plaincopyprint?澳门金沙国际 6澳门金沙国际 7

  1. sudo apt-get install minicom  

    sudo apt-get install minicom

 

   

  3.2
 安装收尾后需求对minicom实行布局,此处配置文件要求root权限,不然无法保存配置的参数,那么在命令行中输入如下命令

 

[【澳门金沙国际】树莓派相关,树莓派串口通讯。plain] view
plaincopyprint?澳门金沙国际 8澳门金沙国际 9

  1. sudo passwd root  

    sudo passwd root

   执行此命令后系统会提示输入五次的root密码,输入你想设的密码即可,然后在执行

 

 

[plain] view
plaincopyprint?澳门金沙国际 10澳门金沙国际 11

  1. sudo passwd –unlock root  

    sudo passwd –unlock root

   那样就解锁了root账户

 

 

  3.3  切换到root账户,再一次打开命令行,输入minicom参数配置命令

 

[plain] view
plaincopyprint?澳门金沙国际 12澳门金沙国际 13

  1. minicom -s  

    minicom -s

    在主菜单的第②项Serial Port
Setup,进入下顶尖菜单,依照菜单项的唤醒字母采纳,按A将串口设备修改为  /dev/ttyAMA0

 

 
 ,按E将Porter率修改为9600要么本身索要的数值,设置好未来回到主菜单,选拔Save
Setup as Dfl 

   
然后选取Exit,此时一经符合规律的话就足以开始展览串口收发了,那里笔者的树莓派是连接到一台PC上去的,笔者利用PC的串口调节和测试软件成功举办了收发

 

   tips: 按CT奇骏L+A,接着按Z能够查阅minicom的增派

  运营:在巅峰里运行“python
mkptych.py&”,那样就足以生成1个基于pty(伪终端)的虚构端口对,八个设备名会呈现在极端里。然后就足以选拔那一个装备名在本机上实行虚构串口之类的调节和测试。

2.安装ros包  sudo apt-get install ros-kinetic-rosserial-arduino

1.实践如下命令进入树莓派配置

  关闭:使用完后用ps查看那么些python进度的pid号,然后kill掉即可。

sudo apt-get install
ros-kinetic-rosserial

sudo raspi-config

澳门金沙国际 14

3.设置arduino的SketchBook,将ros_lib弄进来,关于SketchBook的文件目录,在File->Preferences

分选Advanced Options->Serial ->no关闭串口调节和测试功用

 

澳门金沙国际 15

2.修改/boot/cmdline.txt

2.  Ubuntu下 cutecom
图像界面串口调节和测试工具(参考:

也得以团结定义该目录.

输入上边发号施令:

  (1)终端下载命令:sudo apt-get install cutecom 

cd <sketchbook>/libraries 如果没有libraries目录,自己创建这个目录就可以啦,如果里面已经包含ros_lib目录,请使用rm -rf ros_lib ,防止发生冲突.

rosrun rosserial_arduino make_libraries.py .   用来生成ros_lib库,(注意使用.,当前目录)

sudo nano /boot/cmdline.txt

  (2)通过终端打开软件:sudo
cutecom (需求root权限,不然无法开拓串口)

澳门金沙国际 16

去除划线斜体部分:

  (3)在 Device 中填入上不熟悉成的虚拟串口号  /dev/pts/24   和 
 /dev/pts/25,  Input  中输入文字 ,点击回车发送测试

 

dwc_otg.lpm_enable=0console=ttyAMA0,115200
kgdboc=ttyAMA0,115200
console=tty1 root=/dev/mmcblk0p2
rootfstype=ext4 elevator=deadline rootwait

澳门金沙国际 17

 由于ubuntu下截图不怎么好用,就用了官网的图,道理是如出一辙的。能够依照那一个demo来构建ardunio下的节点,和劳务。

最终变成

 

有关arduino IDE的串口链接,在 Tools->Serial
Port下,选材/dev/ttyACM×(× 或许是0,1,2,3…)

dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4
elevator=deadline rootwait

3.  python 编写测试程序

有关brltty和Arduino之间争持,但在unbuntu
16.04下没什么影响,在Tools->Serial Port
还是得以见见/dev/ttyACM*,并且成功烧入。

3.修改/etc/inittab

  (参考  

并不是毫无疑问要卸载brltty,那个小编以为要实际试过才得以如此说.

输入下边发号施令:

  (1)1.安装pyserial(安装 serial module)

rosrun rosserial_python serial_node.py /dev/ttyACM* 用来启动rosserial节点。

跑的时候,如果arduino 串口监听,rosserial一起启动,经常导致串口异常,导致串口插拔,才可以重新使用。
这个问题,比较不好理解,linux串口非独占的。目前还在解决中。

由于linux串口的跳动,必须固定串口。

sudo nano /etc/inittab

     那里分别python2和 python3:

澳门金沙国际 18

申明掉最终一行内容:

    

 

#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

1 sudo apt install python-pip //python2
2 sudo apt install python3-pip    //python3
lsusb 可以查看当前的usb口。

当然也可以用dmesg

OK、重启下raspberry
pi今后就足以自个儿编写程序测试串口了。我是把TXD与奥迪Q7XD短接,完毕自然自收的。

  (2)然后经过:

澳门金沙国际 19

② 、使用minicom调节和测试串口

1 pip install pyserial    //python2
2 pip3 install pyserial   //python3

能够查看具体的设备。作者认为用arduino 的serial port看起来更合理点。

安装完事后串口便足以健康使用了,便可测试一下树莓派的UA途锐T是或不是健康办事,Pioneer600扩张板带有USB转UA大切诺基T作用,用USB线连接到电脑。minicom正是多个简便好用的工具。minicom是linux平台串口调节和测试工具,约等于windows上的串口调节和测试帮手。

  (3)测试程序

设若当前arduino的串口好是/dev/ttyACM0,

1、minicom安装

 1 import serial
 2 from time import sleep
 3 
 4 def recv(serial):
 5     while True:
 6         data = serial.read_all()
 7         if data == '':
 8             continue
 9         else:
10             break
11         sleep(0.02)
12     return data
13 
14 if __name__ == '__main__':
15     serial = serial.Serial('COM5', 9600, timeout=0.5)  #/dev/ttyUSB0
16     if serial.isOpen() :
17         print("open success")
18     else :
19         print("open failed")
20 
21     while True:
22         data =recv(serial)
23         if data != b'' :
24             print("receive : ",data)
25             serial.write(data) #数据写回

利用udevadm info /dev/ttyACM0 查看串口的实际消息。

sudo apt-get install minicom

 

澳门金沙国际 20

2、minicom启动

  

那中艺术查看本人觉着不是很好,就利用lsusb -vv

minicom -D /dev/ttyAMA0

  

能够看得更驾驭

私下认可波特率为115200,如需安装Porter率为9600加参数 -b
9600,-D代表端口,/dev/ttyAMA0类似于windows中的COM1,

 

澳门金沙国际 21

同时在windows也打开串口帮手。设置Porter率为115200,接纳相应的串口号

参照文章:  

能够知道的来看 idVendor 和idpProduct,那八个是自定义串口的严重性参数。

③ 、串口数据传输

       

 

一贯在minicom控制布里斯托输入内容即可通过串口发送数据,在windows串口帮手中会吸收到输入的内容。同理,在windows串口帮手中发送数据会在minicom控制台上突显。若是minicom打开了回显(先Ctrl+A,再E)可在控制巴尔的摩观测到输出内容,假使回显关闭minicom控制台不会展现你输入的始末。先Ctrl+A,再Q,退出minicom。

       

据说那几个新闻重写串口设施命名规则,采纳Linux的udev来自定义规则来治本设施名称

叁 、串口编制程序

 

(1)

1、wiringPi

注:解决 ImportError: No module named ‘serial’ 问题

  

具体步骤如下。

编写翻译并履行,在window下打开串口帮手会接收到” Hello
World!!!”,发送数据会重返到体现窗口。

/etc/udev/rules.d/10-local.rules

gcc –Wall uart.c –o uart –lwiringPi

修改那几个文件,作者发觉不存在那几个文件(ubuntu 16.04),那么作者 touch
10-local.rules
(其实这些文件名能够不管定义,可是究竟不是太通晓,所以依据Q&A来做,幸免无法复现)

sudo ./uart

跟着 依据查询的idVendor 和idpProduct

#include<stdio.h>

ACTION=="add", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", SYMLINK+="MyAruduino"添加到10-local.rules文件中
`udevadm info -a -p $(udevadm info -q path -n /dev/ttyACM0) `

#include<wriingpi.h>

接下来重启电脑。

#include<fcntl.h>

澳门金沙国际 22

int main()

但发现Arduino
IDE中显得的还是/dev/ttyACM0,所以笔者以为直接使用cutecom串口调节和测试工具来使用.

{

cutecom -> sudo apt-get install cutecom(安装)

int fd;

澳门金沙国际 23

if(wiringPiSetup() < 0)return 1;

Device:直接写/dev/MyArduino ,下拉是心有余而力不足取舍的,

if((fd = serialOpen(“/dev/ttyAMA0”,115200)) < 0)return 1;

小编在Arduino中写serial.write(“ggg”); 在cutecom中早已显得数据,表明可用。

printf(“serial test start …”);

有少数要表明,当你直连Arduino的烧入线的时候,/dev/ttyACM0,当您用扩大板的是/dev/ttyUSB*.(这一个是有分别的)。

serialPrintf(fd,”Hello World!!!”);

 

while(1)

有关ROSSerial别的的题目,必须在遥远利用中稳步积攒。

{

 

serialPutchar(fd,serialGetchar(fd));

(2接下来详细的应用ROSSerial

}

开启 一个console  : roscore

serialClose(fd);

再重新开起三个console

return 0;

 澳门金沙国际 24

}

再开起一个console :

二、python

rostopic pub [topic] [msg_type] [args]

先是运转如下命令安装python serial扩充库。

澳门金沙国际 25

sudo apt-get install python-serial

当跑一段时间,Serial_node就会报错(相当小概共同),关于那些标题,

编写程序

本身觉的是自家打开来Ardunio IDE 的Serial Monitor.所以小编关闭Ardunio
IDE的Serial Monitor,发现并未出现那个荒唐。(差不多测试来半个时辰)

#!/usr/bin/python

固然如此说linux
串口是非垄断的,但同时使用或许会招致力不从心一起的标题,那样的话对于调节和测试感觉很麻烦。

# -*- coding:utf-8 -*-

就此在Arduino
中加来发布代码,在rostopic中看是还是不是接受科学,以下是Arduino代码:

import serial

#include <ros.h>
#include <std_msgs/String.h>

ser = serial.Serial(“/dev/ttyAMA0”,115200)

ros::NodeHandle  nh;
std_msgs::String str_msg;
ros::Publisher ServoPub(“ServoPub”, &str_msg);
void servo_cb( const std_msgs::String &cmd_msg)
{
  str_msg =cmd_msg;
  ServoPub.publish(&str_msg);
  nh.spinOnce();
  delay(1);
}

print(‘serial test start …’)

ros::Subscriber<std_msgs::String> sub(“ServoControl”,
servo_cb);

ser.write(“Hello Wrold !!!\n”)

void setup()
{

try:

  nh.initNode();
  nh.advertise(ServoPub);
  nh.subscribe(sub);
}

while True:

void loop()
{
  nh.spinOnce();
  delay(1);

ser.write(ser.read())

}

except KeyboardInterrupt:

随即运营 :  rosrun rosserial_python serial_node.py /dev/MyArduino

if ser != None:

接着: rostopic echo ServoPub
接着公布新闻:rostopic pub ServoControl std_msgs/String ‘gg’

ser.close()

下图是接受到的多寡:

实行顺序,实验结果和方面一样。

澳门金沙国际 26

sudo python uart.py

接受到publish 的String消息.

注:(1)ser = serial.Serial(“/dev/ttyAMA0”,115200)
打开串口,Porter率为115200

 以上就是rosserial的一部分宗旨接纳,借使有新的剧情继续创新。

(2)ser.write(ser.read())接收字符并回传

 

(3) ser.close() 关闭串口

 

小结:通过地点五个程序大家能够发现和i2c一样,wiringPi,python程序都是读写串口设施文件/dev/ttyAMA0操作串口,故大家也得以透过sysfs的花样编制程序操作串口,在此地小编就不详细介绍了。

 

 

 

 

 

 

 

 

 

澳门金沙国际, 

 

相关文章