一、安装

1.下载软件包pyserial-2.7.tar.gz   网址:https://pypi.python.org/pypi/pyserial

2.8uftp上传至/usr/local/src/目录下

3.cd /usr/local/src/

4.解压tar -zxvf pyserial-2.7.tar.gz

5.cd pyserial-2.7/         //在该解压后的文件里发现setup.py文件,而没有configrue文件,所以,

//下一步用sudo python setup.py install,而不是./configrue --prefix=/usr.....

6.安装sudo python setup.py install

注:网上还有如下方法编译安装pyserial
cd /usr/local/src/
wget http://pypi.python.org/packages/source/p.......        //用wget直接下载到当地当前目录下
tar -zxvf pyserial-2.4.tar.gz

cd pyserial-2.4
python2.6 setup.py install

二、使用

import serial导入模块

然后就可以用了

ser = serial.Serial(0) 是打开第一个串口

print ser.portstr 能看到第一个串口的标识,windows下是COM1

ser.write(“hello") 就是往串口里面写数据

ser.close() 就是关闭ser表示的串口

ser.open() 会打开这个串口

ser = serial.Serial('COM1', 115200) 来设置波特率,当然还有专门的函数

data = ser.read()可以读一个字符

data = ser.read(20) 是读20个字符

data = ser.readline() 是读一行,以/n结束,要是没有/n就一直读,阻塞。

data = ser.readlines()和ser.xreadlines()都需要设置超时时间

ser.baudrate = 9600 设置波特率

ser 来查看当前串口的状态

ser.isOpen() 看看这个串口是否已经被打开

三、树莓派串口UART(转载,原文:http://blog.csdn.net/xukai871105/article/details/22713925)

0.前言

    本文将详细介绍树莓派的串口(UART)配置和使用,并结合一个modbus RTU从机的例子说明树莓派串口的应用。
    在开始前说明以下几点
    【1】树莓派UART端口的位置
    TXD位于HEAD-8
    RXD位于HEAD-10
    GND位于HEAD-6(可选其他GND)
    【2】树莓派的TXD应接USB转串口设备的RXD,当然如果测试失败请交换RXD和TXD的顺序
    【3】经过很多次的测试(N>25),当波特率为115200时打开树莓派的UART时,树莓派会莫名其妙的发送一字节0xF8,该问题始终无法解决。不过波特率为9600时并没有此问题,猜测是树莓派硬件或内核驱动问题。
    【4】树莓派的串口默认为SSH调试使用(参考:http://www.cnblogs.com/ma6174/archive/2013/04/23/3038626.html),若要使用串口需要修改两处文件。
    
图1 树莓派 UART位置
 
1.修改两处文件
【1】/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】/etc/inittab
    【输入以下指令】
    sudo nano /etc/inittab
    【注释最后一行内容】//禁止掉从串口登录的功能
#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
 
2.使用minicom
    配置完之后便可测试一下树莓派的UART是否正常工作,而minicom便是一个简单好用的工具。minicom是linux平台串口调试工具,相当于windows上的串口调试助手。
    【1】minicom安装
    sudo apt-get install minicom
    【2】minicom启动
    minicom -b 9600 -o -D /dev/ttyAMA0
    -b代表波特率,-D代表端口,/dev/ttyAMA0 类似于windows中的COM1,-o功能暂时未知。
    图2 minicon界面
    【3】minicom发送内容
        直接在控制台中输入内容即可,如果minicom打开了回显可在控制台中观察到输出内容,如果回显关闭则控制台中没人任何反应,千万不要以为minicom没有正常工作。
    【4】minicom回显控制
        先Ctrl+A,再E。可翻转回显状态(原来回显打开则此事回显关闭)
    【5】minicom回显关闭
        先Ctrl+A,再Q。
 
3.使用pyserial
    minicom仅满足调试用途,如果需要编程解决问题那么python的serial扩展库——pyserial则是一个不错的选择。pyserial模块非常好用,后面的文章还会分析如何使用pyserial控制GPRS模块。
    【pyserial安装】
    安装pyserial扩展库有很多种方法,可使用pip或者easy_install安装,也可以直接选择apt-get工具安装。
    若使用apt-get工具安装,可输入以下指令
    sudo apt-get install python-serial
 
    【串口回显程序】
    非常简单的一个串口程序,树莓派通过串口返回接收的内容。
  1. # -*- coding: utf-8 -*
  2. import serial
  3. import time
  4. # 打开串口
  5. ser = serial.Serial("/dev/ttyAMA0", 9600)
  6. def main():
  7. while True:
  8. # 获得接收缓冲区字符
  9. count = ser.inWaiting()
  10. if count != 0:
  11. # 读取内容并回显
  12. recv = ser.read(count)
  13. ser.write(recv)
  14. # 清空接收缓冲区
  15. ser.flushInput()
  16. # 必要的软件延时
  17. time.sleep(0.1)
  18. if __name__ == '__main__':
  19. try:
  20. main()
  21. except KeyboardInterrupt:
  22. if ser != None:
  23. ser.close()
 
4.总结
    由于可借助python标准库使得树莓派的串口格外好用。是不是可以拿树莓派做一个Modbus RTU从机,的确可以请期待后面的博文吧。
 
5.参考资料
【1】minicom使用 国外博客
【2】elinux python-serial 安装pyserial及例程等
 
四、raspi串口通信控制51单片机点亮LED(装载) 原文地址:http://www.360doc.com/content/13/0314/00/3810344_271368104.shtml

raspberry pi 串口控制51单片机

Posted on 2013 年 2 月 5 日 by 张 子萌

  制作小车都用raspberry pi上的口有些麻烦,所以把一些基础控制给51单片机解决,raspberry pi控制高层应用。所以测试一下raspberry pi串口连接调试51单片机。
  第一步: //我自己第一步:sudo apt-get install pyserial(python的串口模块)

sudo apt-get install python-serial
sudo easy_install pyserial

  第二部接线部分图     //我自己这一排依次接:单片机的+5v、悬空、单片机的地、单片机的RXD、单片机的TXD。
  raspberry pi板子串口接线图

raspberry 串口接线图1

  杜邦线连接
 

raspberry 串口接线图3

代码部分

      raspberry pi python串口控制代码://以下标黄色这句,运行错误,提示类型不正确,可能是python解释器版本的问题,在python3.x以上版本
                                                      //函数的参数不是整形或字符串,而是序列,所以在黄色语句前加入语句tstlist=[i],将参数转为序列,如下:

//#tstlist=[22,8,8,3,3,3]
                                                      //tstlist=[i]
                                                      //ser.write(tstlist[:])

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/bin/env python
# -*- coding:utf-8 -*-
# -------------------------------
# Filename:   
# Revision:   
# Date:        2013-02-5
# Author:      simonzhang
# Email:       simon-zzm@163.com
# WWW:         www.simonzhang.net
# -------------------------------
import serial
import time
 
#### 定义小灯亮灭初始值
= 0
#### 实例化串口
ser = serial.Serial('/dev/ttyAMA0'9600, timeout = 0.5)
for in range(10):
    if ser.isOpen() == False:
        ser.open()
    #### 每次循环对上值次取反
    if == 0:
       = 1
    else:
       = 0
    #### 向串口发送字符
    ser.write(chr(i))
    #### 获取串口返回值
    #### linux为福阻塞模式,在阻塞模式下
    #### 会报错,所以抱起来就好了。
    try:
        re = ser.readlines()
    except:
        pass
    print re
    time.sleep(2)
     注:以上标黄色这句,运行错误,提示类型不正确,可能是python解释器版本的问题,在python3.x以上版本,函数的参数不是整形或字符串,而是序列,所以在黄色语句前加入语句tstlist=[i],将参数转为序列,如下:

#tstlist=[22,8,8,3,3,3]

tstlist=[i]

ser.write(tstlist[:])。更重要的是解决问题的思路:当运行错误的时候,会提示在库函数里面具体哪个函数出错了,是to_bytes(data)函数,仔细解读这个函数发现它是将所给参数(是序列)转换为字符,在程序的注释部分也有说明,于是想到先把参数转化为序列再给ser.write(...)函数,解决问题。思路:去库函数具体出错的函数处分析原因。

/************其他人的解决办法***************/

ser=serial.Serial(6,115200)#这里没有问题
at='at'+chr(13)
ser.write(at)
让后马上就报错了.
File "C:\Python33\lib\site-packages\serial\serialutil.py", line 76, in to_bytes
b.append(item) # this one handles int and str for our emulation and ints for Python 3.x
TypeError: an integer is required

某人回复:3的字符串都是unicode,发送前是不是要encoding成别的编码?

楼主修改:at='AT' at=at+chr(13) at.encode('ascii')


/***************************************/

51单片机代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <reg52.h>
#include <intrins.h>
typedef unsigned char uint8;
typedef unsigned int  uint16;
 
 
uint8 num;
sbit D0 = P0^0;
 
void init()
{
    SCON = 0x50;
    TMOD = 0x20;
 
    TH1 = 0xFD;
    TL1 = 0xFD;
    TR1 = 1; //打开定时器
    ES  = 1;
    EA  = 1; //打开总开关
}
 
void interrupt_uart() interrupt 4
{
    if(TI)
    {
        TI = 0;
        REN = 1;
    }
    if(RI)
    {
        RI = 0;
        num = SBUF;
        if (num == 1)
        {
            D0 = 0;
            SBUF = 0;
        }
        else
        {
            D0 = 1;
            SBUF =1;
        }
        REN = 0;
    }
}
 
 
main()
{
    init();
    while(1);
}

源码下载
raspberrypito51

五、pyserial解析:

1.serial.Serial的参数有哪些:

>>> import serial
>>> ser=serial.Serial("/dev/ttyAMA0",9600)
>>> ser
Serial<id=0xb6afc6b0, open=True>(port='/dev/ttyAMA0', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)

2.pyserial官网文档地址:pyserial.sourceforge.net

  • timeout = None: wait forever
  • timeout = 0: non-blocking mode (return immediately on read)
  • timeout = x: set timeout to x seconds (float allowed)

raspi串口、python串口模块pyserial的更多相关文章

  1. Python 串口通讯

    摘要: pyserial module: https://github.com/tbusf/pyserial Python使用pyserial进行串口通信:http://blog.csdn.net/l ...

  2. python串口助手

    最近项目中要使用模拟数据源通过向外发送数据,以前都是用C#编写,最近在研究python,所以就用python写了一个串口助手,方便以后的测试. 在电脑上通过虚拟串口助手产生两个虚拟串口,运行编写的串口 ...

  3. python 常用模块(转载)

    转载地址:http://codeweblog.com/python-%e5%b8%b8%e7%94%a8%e6%a8%a1%e5%9d%97/ adodb:我们领导推荐的数据库连接组件bsddb3:B ...

  4. Python标准模块--threading

    1 模块简介 threading模块在Python1.5.2中首次引入,是低级thread模块的一个增强版.threading模块让线程使用起来更加容易,允许程序同一时间运行多个操作. 不过请注意,P ...

  5. Python的模块引用和查找路径

    模块间相互独立相互引用是任何一种编程语言的基础能力.对于“模块”这个词在各种编程语言中或许是不同的,但我们可以简单认为一个程序文件是一个模块,文件里包含了类或者方法的定义.对于编译型的语言,比如C#中 ...

  6. Python Logging模块的简单使用

    前言 日志是非常重要的,最近有接触到这个,所以系统的看一下Python这个模块的用法.本文即为Logging模块的用法简介,主要参考文章为Python官方文档,链接见参考列表. 另外,Python的H ...

  7. Python标准模块--logging

    1 logging模块简介 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等:相比print,具备如下优点: 可以通过设置不同 ...

  8. python基础-模块

    一.模块介绍                                                                                              ...

  9. python 安装模块

    python安装模块的方法很多,在此仅介绍一种,不需要安装其他附带的pip等,python安装完之后,配置环境变量,我由于中英文分号原因,环境变量始终没能配置成功汗. 1:下载模块的压缩文件解压到任意 ...

随机推荐

  1. PAT (Basic Level) Practise (中文)-1038. 统计同成绩学生(20)

    PAT (Basic Level) Practise (中文)-1038. 统计同成绩学生(20)    http://www.patest.cn/contests/pat-b-practise/10 ...

  2. ewebeditor上传文件大小

    做项目大家都少不了要跟html在线编辑器打交道,这里我把我的一些使用经验及遇到的问题发出来和大家交流一下. Ewebeditor使用说明:一.部署方式:1.直接把压缩目录中的文件拷贝到您的网站发布目录 ...

  3. PLAYGROUND 可视化

    PLAYGROUND 可视化 由 王巍 (@ONEVCAT) 发布于 2015/09/23 在程序界,很多小伙伴都会对研究排序算法情有独钟,并且试图将排序执行的过程可视化,以便让大家更清晰直观地了解算 ...

  4. 总结:JavaScript异步、事件循环与消息队列、微任务与宏任务

    本人正在努力学习前端,内容仅供参考.由于各种原因(不喜欢博客园的UI),大家可以移步我的github阅读体验更佳:传送门,喜欢就点个star咯,或者我的博客:https://blog.tangzhen ...

  5. 【离线做法 树状数组】luoguP1972 [SDOI2009]HH的项链

    与bzoj3585: mex的线段树做法有着异曲同工之妙 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含 ...

  6. 王小胖之 Base64编码/解码

    使用场景:编码网址作为URL参数,简单编码或加密数据,下载地址生成或解析. 实现功能:BASE64在线编码和解码. 数据实例:王小胖好啊,王小胖顶呱呱!! ~~ english 123 !@#$%^& ...

  7. Python模块概念

    补充:生成器表达式 将列表生成器的中括号改为小括号就是生成器表达式 res = [i for i in range(10) if i > 5]  #  列表生成式 res = (i for i ...

  8. python_列表——元组——字典——集合

    列表——元组——字典——集合: 列表: # 一:基本使用# 1.用途:存放多个值 # 定义方式:[]内以逗号为分隔多个元素,列表内元素无类型限制# l=['a','b','c'] #l=list([' ...

  9. 不同深度的图片转换cvConvertScale

    不同深度图像的转换:要注意范围比如IPL_DEPTH_8U 转到 IPL_DEPTH_32U要用cvConvertScale(pImg8, pImg32, 1.0/255, 0); 要除255反过来I ...

  10. 1 producer — n consumers 模型 实现

    #include<stdio.h> #include<string.h> #include<pthread.h> #include<stdlib.h> ...