如果您觉得本文对您有用,希望您点赞,收藏并且把它分享出去,不明白的可以在评论区留言,我会一一解答,感谢您的支持!!
Android手机HC-05蓝牙连接Arduino nano获取DHT-11温湿度传感器数据
起初我所理解的,应该是这样连接
HC-05 nano
TX----RX
RX----TX
5V----5V
GND----GND
HC-05蓝牙3.3V即可,5V蓝牙可以自适应不会烧掉
DHT-11 nano
Out----D2
5V----5V
GND----GND
DHT-11温湿度传感器5V没问题,3.3V也能用
我认为温湿度传感器输出到了串口,那么就等于输出到了蓝牙。
DHT-11输出到蓝牙,安卓手机app接收蓝牙传过来的数据以文本显示在前端变量上
结果测试了很多次以后,发现输出是乱码。
于是我就怀疑起蓝牙到底发过来的是什么,蓝牙到底是怎样传输,我所认为的对不对。后来我发现蓝牙输出并不一定要用串口输出,所以就改变了接线。
HC-05 nano
TX----D6
RX----D5
5V----5V
GND----GND
这时,nano即使USB串口连着电脑也可以正常烧录代码,不用拔插蓝牙的RX,TX了(主要是当蓝牙RX,TX连接了nano的TX,RX时,占用串口无法烧录,nano烧录的时候是使用这两个端口进行数据传输的)
那么我在想串口是啥呢?串口其实就是Serial,串口输出就是Serial.print
如果是蓝牙输出那就是Bluetooth.print,要是屏幕输出那就是LCD.print,扬声器输出那就是Sound.print,其实这个前缀(Serial,Bluetooth,LCD,Sound当然也可以改名,只要你知道就行)这些变量,应该就是在dht11.h里面定义的,不然的话没办法输出。
这里面太深我也看不懂,里面还包含了文件,所以你的arduino编辑器也得加载这些库文件吧,不然的话无法运行
除此之外还有一个文件,也要放到工程目录下,不然的话无法运行
我把大部分英文备注都去了,我也看不懂,我觉得是根据电路图
往引脚pin输出低电平,18毫秒后,输出高电平,40微秒后再往pin引脚输入,来获取传感器数值,并且放到一个数组里面,这个数组是bits,前两位是湿度值,后两位是温度值,uint8_t 代表无符号整形,8位=1字节,t是啥意思?typedef。代表他是通过typedef定义的头文件。其他的自己联想吧,不想看C的可以略过
以前我以为串口输出=蓝牙输出,其实不然,蓝牙可以是蓝牙,串口可以是串口。
之前还发过蓝牙调试,我当时写了其实也没太明白,现在感觉明白点了。
HC-05蓝牙默认频率是38400,所以最好设置成这个,不然的话我感觉输出的内容可能会是乱码
之前输出到安卓手机的时候,始终是一个菱形框里面有个问号,要么就是多个菱形框里面有问号,大家可以手机下载蓝牙串口SPP连接蓝牙进行调试,看看输出的是什么。
当时还输出0x80啥的,我网上查了也查不到是啥,我起初以为是16进制输出需要转换成UTF-8,后来可能是我多想了。
以上就是传到nano上的源码了,还有一句没有说明,就是这个,后面的App Inventor会用到。
我现在也没搞懂他到底输出了什么,我只知道他输出了温度值和湿度值,至于这个温度值和湿度值是什么格式我也不知道(后来知道能就是1个字节的8位整形无符号数),应该是int。
样式就不说什么了,"连接蓝牙"是一个列表选择框,点击以后就会弹出蓝牙的列表,选择以后就建立蓝牙和手机的连接。
蓝牙客户端:
这里的蓝牙客户端所指的就是手机
字符编码:
默认设置为,当然也可以支持,或者啥的,当然还有,,其他的我都没测试,有可能是蓝牙发送中文的时候会用得到。这里蓝牙到底发的啥我也不知道,所以就吧。
分隔符字节码:
我的理解是,因为蓝牙每间隔1秒发送一次数据给手机,那么他给手机的就是例如:,其中24表示温度值,30表示湿度值,但是我显示在前端应该是两个数据,在这1秒钟里,所以我对于蓝牙发送过来的数据进行拆分。如何进行拆分呢?那么就要在数据之间加入分隔符,我下位机加入分隔符的方法就是加入了a字符,但在这个分隔符字节码选项里面我试了,#号不行,其他符号也不行,英文也不行,只能是0-9,所以我认为,它是按照字节进行分隔的,于是我就填入了1,按照1个字节进行分割,所以在程序中加入了,PS:这个a也可以是其他字母,最好不要是数字,因为会跟温湿度值混淆,避免出错,也就是蓝牙会输出成这样:,那么到安卓app上面按照字节再进行拆分。
此外还要设置一个计时器,计时器的作用是:让蓝牙发送和蓝牙客户端接收数据能够同步进行,当手机连接到蓝牙以后,计时器启动,手机客户端接收,不然的话有可能会导致数据错位。
这里计时器的计时间隔我也设置成为1秒。