片网站无法显示,网站如何做seo排名,网站建设维护公司,网页微信登录不了1、串口蓝牙模块AT-09
AT-09是一种串口蓝牙模块#xff0c;可实现串口与蓝牙之间的数据传输。AT-09模块基于蓝牙4.0技术#xff0c;具有低功耗、高传输速率和广泛的应用范围。
AT-09模块支持AT指令#xff0c;通过串口与外部设备进行通信。用户可以使用AT指令对模块进行配…1、串口蓝牙模块AT-09
AT-09是一种串口蓝牙模块可实现串口与蓝牙之间的数据传输。AT-09模块基于蓝牙4.0技术具有低功耗、高传输速率和广泛的应用范围。
AT-09模块支持AT指令通过串口与外部设备进行通信。用户可以使用AT指令对模块进行配置和控制例如设置蓝牙名称、密码、通信速率等。通过串口用户可以与AT-09模块进行数据传输实现与蓝牙设备的无线通信。
AT-09模块通常用于无线传输、数据采集等应用场景。它可以与各种主控板和设备进行连接如Arduino、Raspberry Pi等。通过AT-09模块用户可以方便地将串口设备无线化实现无线控制和数据传输。
有了这个串口蓝牙模块我们就可以用手机远程控制很多物联网设备了。有了通信网整个世界都变得更加丰富多彩了。
2、蓝牙cc2541模块
串口蓝牙模块所用的蓝牙芯片是CC2541而真正的无线通信是靠CC2541收发数据。串口仅仅是用来将无线收发的数据通过串口送开发板微处理器。
CC2541是一款针对低能耗以及私有2.4GHz应用的功率优化的真正片载系统SoC解决方案。它使得使用低总体物料清单成本建立强健网络节点成为可能。CC2541将领先RF收发器的出色性能和一个业界标准的增强型8051MCU、系统内可编程闪存存储器、8kBRAM和很多其它功能强大的特性和外设组合在一起。CC2541非常适合应用于需要超低能耗的系统。
通过下图可以看出真正片载系统Soc即串口底板片上蓝牙模块。具体的原理内部结构功能引脚等等请看数据手册把。 通过USB-TTL与电脑或者开发板连接与电脑的连接可以参考我这个专栏的语音模块syn6288那一部分。
我们这里还是介绍与树莓派的接线引脚引出线只有4根这样就好接线了VCC接开发板5VGND接地TXD接开发板的RXD0BOARD10RXD接开发板的TXD0BOARD8
3、手机蓝牙助手连接CC2541
这个部分最简单但是也最重要因为手机上要有应用程序和蓝牙模块建立连接。手机上的蓝牙应用程序可不是C或Python写的具体我们也不要管它了我们下载一个别人写好的能用的蓝牙助手安卓手机安装包的名称为HCbluetooth.apk。然后将蓝牙模块也插上电上电后蓝牙模块的指示灯不停闪烁。
在手机上找到刚刚安装的HC蓝牙助手点击打开打开后搜索到该模块点击连接就OK了。 连接上之后蓝牙模块的灯就不会闪了一直亮着然后把这几个模块都看看。 这个发送速度就设置为中就可以经测试为波特率为9600停止位1位数据位8位奇偶校验无回头开发板的串口也设置为一样即可。
4、踩坑必看
本以为很简单的事情运行程序后收到的数据不正常或者收不到数据。耽误了大半天时间经过我一顿思考和尝试这里有个坑同学们注意。如果你还没有运行程序请先看第5部分。
1如果在运行程序出现提示权限问题可以sudo chmod 666 /dev/ttyS0 暂时解决 3手机HC蓝牙助手也出现这样的echo 这些看似很多问题可能是由于同一个问题导致的就是蓝牙串口使用了ttyS0设备该设备默认让用户通过串口登录很久以前windows有个超级终端的串口登录估计同学们都不知道了那已经是20多年前的事情了以前都是都过串口登录到设备做一些调试比如路由器、交换机。该树莓派也是打开串口让用户登录。所以在通过蓝牙串口发送数据给树莓派时开启了串口终端登录。我们到树莓派配置里面将这个功能给关闭。 点击OK后重启。估计就不会出现上述问题了。
4、实验代码与现象
有了这个模块我们就可以发送数据给开发板了比如打开第1个灯关闭第1个灯或者开1关1总之python语言中对字符串的处理是非常方便的。只要包含开关这两个字就知道状态给0还是1然后再从字符串中提取数字把这个值赋值给变量即可。我这边为了节省IO口仍然用TM1638扩展板做如果同学们没有就直接放2个LED实现效果即可。
iimport serial
import TM1638
import time
import redef init():global tmtmTM1638.TM1638(stb36,clk38,dio40) tm.brightness(2)DEVICE /dev/ttyS0global serserserial.Serial(DEVICE,baudrate9600,bytesize8,parityN,stopbits1,timeout0.1)def main_loop():while True:if ser.in_waiting 0:# 读取串口数据data ser.readall().decode(utf-8).strip()print(收到的数据:, data)if 开 in data:status 1elif 关 in data:status 0elif data结束程序:breakelse:ser.write(bytes(没有给出正确的指令,utf-8)) firstnum re.search(r\d,data)if firstnum:first_number firstnum.group() if int(first_number)0 and int(first_number)8:tm.led(int(first_number)-1,status) else:ser.write(bytes(没有给出正确的LED号码1-8,utf-8))if __name__ __main__:init()try:main_loop()except KeyboardInterrupt:print(程序结束)finally:tm.clear()ser.close()程序解释
1程序代码没有多少行这就体现了Python语言的精练同样的代码用C来写你试试把。可能有同学觉得树莓派毕竟是一台口袋电脑用来做物联网成本有点高而低成本的处理器可能不支持python。我这里有个想法但是还没有考虑成熟等我把树莓派栏目写完我打算用ESP32或ESP8266做MicroPython的实验或项目看看MicroPython在物联网上面和C的性能差距有多少。
2串口设置不管有些参数是不是默认值还是将波特率、数据位、停止位、奇偶校验都设置下。serserial.Serial(DEVICE,baudrate9600,bytesize8,parityN,stopbits1,timeout0.1)
串口通信超时解决方案在进行串口通信时可能会遇到以下两个问题a读取串口数据时阻塞时间过长造成程序无法及时响应。b进行写操作时设备没有及时响应。 为了解决这些问题我们可以使用Python的serial库提供的timeout参数来设置超时时间。timeout参数是一个浮点数代表等待数据的最长时间以秒为单位。当没有数据可读时等待超过指定的超时时间后将触发超时异常。
3serial-三方库提供了一系列的方法来处理串行通信。
in_waiting返回输入缓冲区中的字节数。 if ser.in_waiting 0: # 读取串口数据 data ser.readall().decode(utf-8).strip()
收到的数据都是以字节流的形式放到接收缓冲区上面是正确的接收我之前写的代码是
data ser.readall()
if data: text data..decode(utf-8)
结果发现utf8编码的汉字被拆成3个字节一个一个的printpython就没有办法解码了。 4输入相关指令对LED进行控制可以先让程序发一段解释说明给手机这样最好。 if 开 in data:status 1elif 关 in data:status 0elif help in data:ser.write(bytes(请输入开/关 1-8的字样\n,utf-8)) elif data结束程序:breakelse:ser.write(bytes(没有给出正确的指令\n,utf-8))
当然我这个程序if的嵌套逻辑结构不是最好的如果业务逻辑比较丰富的话可以参考模块化编程的思想和方法。
5指令包括2个参数一个是第几个灯一个是状态所以状态通过开关来给定第几个灯要从用户输入的内容里面提取数字再判断数字的有效范围。
从字符串里面提取第一个数字firstnum re.search(r\d,data)这里用到了正则表达式需要导入re库正则表达式是一种强大的文本处理工具用于匹配、查找、替换复杂的文本模式。它由普通字符和特殊字符元字符组成能够描述和匹配一系列符合特定规则的字符串。