树莓派怎么样用 Python 控制 GPIO 来发送串口指令?

2015 年 7 月 8 日
 GPU
用过RPi.GPIO 与 Writing Pi 但是他们都只能设置GPIO的高低电平啊

我需要用GPIO发送一些指令给蓝牙模块让蓝牙控制远端的从模块

看了几篇貌似都是把系统的ttyAMA0 (pin 14、15)用来做串口的输入输出

有没有方法用其他IO口也可以实现呢?
11608 次点击
所在节点    Raspberry Pi
27 条回复
imydou
2015 年 7 月 8 日
貌似没有,所有类库都是通过操作文件系统实现高低电平
GPU
2015 年 7 月 8 日
@imydou RPi.GPIO 是直接可以指定某个IO口 然后设置高低电平 ,但是这个只能是设置高低电平,不能发送英文命令
wy315700
2015 年 7 月 8 日
@GPU 做一个编码,
choury
2015 年 7 月 8 日
有硬件的串口干嘛要软件实现呢,用GPIO实现的话你自己设置高低电平然后根据波特率计算延时啊
hardware
2015 年 7 月 8 日
感觉不如FT232转一下咯
GPU
2015 年 7 月 8 日
@choury 你意思是说直接用树莓派的串口(14、15pin) ? 我只是想如果可以就不占用本身的串口

@wy315700 是不是那个把指令编码成高低电平的程序? 我不清楚怎么去写。
pathletboy
2015 年 7 月 8 日
要用到系统中断的,软串口得另外搞驱动。
pathletboy
2015 年 7 月 8 日
gamexg
2015 年 7 月 8 日
建议串口连接 Arduino ,底层的全部由 Arduino 来做。

高级语言很难满足底层的时序要求。来个进程切换时序就完蛋了。
GPU
2015 年 7 月 8 日
@gamexg Arduino 我还没有用过 ,不知道应该怎么弄


@pathletboy 嗯 。我看看
zhengnanlee
2015 年 7 月 9 日
你的蓝牙模块可不可以i2c呢?
weyou
2015 年 7 月 9 日
看你的蓝牙模块的接口, 是不是支持i2c或者spi, 这两种总线接口RPi都支持, 并且有现成的python库可以用。

如果这两种总线你的蓝牙模块都不支持,才需要考虑用GPIO来进行软模拟(bit banging)。试验过GPIO最高的切换频率只能到达30kHz左右,所以你的蓝牙通信的波特率也不能超过这个频率,你可以查看下你的蓝牙模块对通信频率的要求。
GPU
2015 年 7 月 9 日
@zhengnanlee
@weyou
我的是 CC2540的主模块 CC2541 的从模块
但是貌似我的主模块只有透传模式啊
GPU
2015 年 7 月 9 日
我的主模块是一个 串口透传模块
zhengnanlee
2015 年 7 月 9 日
@GPU 啊哈ZigBee。可以拿ZigBee模拟i2c,51代码直接用。rPi端用wiringPi或smbus都可以实现i2c。
zhengnanlee
2015 年 7 月 9 日
GPU
2015 年 7 月 9 日
@zhengnanlee 我那个蓝牙貌似没有引出 i2c 的io口
zhengnanlee
2015 年 7 月 9 日
任选二gpio,百度“51 i2c”,谷歌“51 i2c”
GPU
2015 年 7 月 9 日
@zhengnanlee 我现在的两个蓝牙模块连接之后是透传模式 ,我是需要在主模块的串口上面发送字符串到从模块 ,然后从模块的单片机识别到字符串之后 再输出低电平 然后启动开关

但是用i2c 的话 是不是我就要换蓝牙模块了
zhengnanlee
2015 年 7 月 9 日
@GPU 不需要。无线收发字符在ZigBee里不需要用gpio。协议栈写好了主函数正常收发即可。主函数的无限循环可以是这个逻辑:模拟i2c从树莓派读取数据,判断处理,无线发送。从机一直查询蓝牙即可。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/204277

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX