一、安裝
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.前言


- # -*- coding: utf-8 -*
- import serial
- import time
- # 打開串口
- ser = serial.Serial("/dev/ttyAMA0", 9600)
- def main():
- while True:
- # 獲得接收緩沖區字符
- count = ser.inWaiting()
- if count != 0:
- # 讀取內容並回顯
- recv = ser.read(count)
- ser.write(recv)
- # 清空接收緩沖區
- ser.flushInput()
- # 必要的軟件延時
- time.sleep(0.1)
- if __name__ == '__main__':
- try:
- main()
- except KeyboardInterrupt:
- if ser != None:
- ser.close()
raspberry pi 串口控制51單片機
制作小車都用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板子串口接線圖
杜邦線連接

代碼部分
//#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
#### 定義小燈亮滅初始值
i
=
0
#### 實例化串口
ser
=
serial.Serial(
'/dev/ttyAMA0'
,
9600
, timeout
=
0.5
)
for
j
in
range
(
10
):
if
ser.isOpen()
=
=
False
:
ser.
open
()
#### 每次循環對上值次取反
if
i
=
=
0
:
i
=
1
else
:
i
=
0
#### 向串口發送字符
ser.write( chr (i))
#### 獲取串口返回值
#### linux為福阻塞模式,在阻塞模式下
#### 會報錯,所以抱起來就好了。
try
:
re
=
ser.readlines()
except
:
pass
print
re
time.sleep(
2
)
|
#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)