之前申请行空板评测的时候就是准备用行空板通过串口读取红外二氧化碳传感器数据,但是年前一直没有测试成功,本来想着年后能测试成功,后面测试了几次,还是不行,显示程序编译错误,后面虽然编译正确,但是程序运行结果有问题。我的程序时根据行空板官方的uart例程修改过来的,如下图所示:
# -*- coding: utf-8 -*-
import time
from pinpong.board import Board, UART
Board("UNIHIKER").begin() #初始化,选择板型,不输入板型则进行自动识别
#硬串口1 P0-RX P3-TX
uart1 = UART()
#初始化串口 baud_rate 波特率, bits 数据位数(8/9) parity奇偶校验(0 无校验/1 奇校验/2 偶校验) stop 停止位(1/2)
#uart1.init(baud_rate = 9600, bits=8, parity=0, stop = 1)
uart1.init() #默认波特率为9600
buf = [0xfe, 0x04, 0x00, 0x03, 0x00, 0x01, 0xd5, 0xc5]
#关闭硬串口1
#uart1.deinit()
#返回可读取的字节数
#uart1.any()
#串口写,buf为数列
#uart1.write(buf)
#读取串口字符,返回None或者数列
#uart1.read(n)
#读一行,以换行符结尾。读取行或 None 超时。(到换行键(0xa)结束,无则返回None)
#buf = uart1.readline()
#将字节读入buf。如果 nbytes 指定,则最多读取多个字节。否则,最多读取 len(buf) 字节数。
#uart1.readinto(buf, nbytes)
#uart1.write(buf)
while True:
uart1.write(buf)
#time.sleep(1)
print(uart1.read(7))
#print(uart1.readinto(buf, 7))
我的红外二氧化碳传器串口通信协议如下图所示:
通过串口通信协议可以看到,主控芯片像红外二氧化碳传感器发送0xfe 0x04 0x00 0x03 0x00 0x01 0xd5 0xc5共计八个字节,然后传感器回复七个字节,其中前面三个是固定的0xfe 0x04 0x02,然后第四个字节是二氧化碳浓度的高字节,第五个字节是二氧化碳浓度的低字节。
硬件上通过行空板金手指部分指示图中的uart引脚中的rx连接传感器的tx,行空板的tx接上传感器的rx,当然行空板的gnd和传感器的gnd也要接上,行空板金手指中的uart部分引脚示意图下图所示:
程序运行后通过串口打印出来的部分结果如下图所示:
None
None
None
None
None
None
None
[0, 3, 0, 0, 0, 1, 0]
[85, 1, 69, 1, 247, 240, 13]
[13, 1, 16, 126, 1, 4, 0]
[0, 0, 3, 0, 0, 0, 1]
[0, 85, 1, 69, 1, 247, 0]
[0, 0, 3, 0, 0, 0, 1]
[0, 85, 1, 69, 1, 247, 240]
[13, 13, 1, 16, 126, 1, 4]
[0, 0, 0, 3, 0, 0, 0]
[1, 0, 85, 1, 69, 1, 247]
[240, 13, 254, 4, 0, 3, 0]
[1, 213, 197, 254, 4, 0, 3]
[0, 1, 213, 197, 254, 4, 0]
[3, 0, 1, 213, 197, 254, 4]
[0, 3, 0, 1, 213, 197, 254]
[4, 0, 3, 0, 1, 213, 197]
None
None
None
None
None
None
[0, 3, 0, 0, 0, 1, 0]
[85, 1, 69, 1, 247, 240, 13]
[13, 1, 16, 126, 1, 4, 0]
[0, 0, 3, 0, 0, 0, 1]
[0, 85, 1, 69, 1, 247, 240]
[13, 13, 1, 213, 197, 254, 4]
[0, 3, 0, 1, 213, 197, 254]
[4, 0, 3, 0, 1, 213, 197]
[254, 4, 0, 3, 0, 1, 213]
[197, 254, 4, 0, 3, 0, 1]
[213, 197]
None
None
None
None
None
None
None
通过上述打印出来的结果,发现大部分时候都是输出none,有时候输出有一组7个字节的数据,但是跟我应该正确独到数据不一样,不知道咋回事,网上查pinpong库的uart内容也比较少,所以想看一下pinpong库里面的urat的初始化函数,读写函数的具体内容,都查不到,不知道有没有网友知道,如果有知道的网友麻烦帮忙指点一下,谢谢!
我是大概四年前通过阅读python入门与实践那本书的前面差不多一半的内容入门和掌握了不少python知识,但实际中总感觉phthon程序设计很难做到举一反三,这点跟我之前写过的c程序和汇编程序是不一样的。我也是有着七年工作经验的单片机工程师,期间用汇编和C做过不少项目,感觉在做智能硬件产品这块,还是C比python效率高一些,根据我自己的实际调试经历,我感觉python首先是举一反三比较困难,其次运行错误的时候,有些错误原因也不好找。这两点上python相对于汇编和C来说,有时不明显。所以我个人感觉以后自己想要用python来开发一些智能硬件产品还是任重道远,需要多实践多总结。
最后结合本次行空板评测做一个简单的总结吧,首先在申请行空板评测的时候,就是被宣传视频给打动了,因为里面提到的通过行空板实现的一些功能跟我平时工作有不少相似,有些行空板做的功能虽然工作上还没有用到,但是也是我一直研究,准备做出实用的产品的,比如水质检测。所以当我看到行空板的这些功能都跟我的工作经历和兴趣爱好是高度一致的时候,我就已经深深的被行空板给种草了,也是从那时起就准备着用行空板做一些自己一直想做的有意义的产品的,当然目前看来,自己对行空板还不够熟悉,所以还需要多学习,多实践,争取早日实现的自己当初申请行空板评测时的初衷。最后用一句励志的化自我鼓励和鞭策一下:砥砺前行,不忘初心,方能有始有终。