【RealtekRTL8722DM物联网开发套件】I. 通过Arduino示例热身
【RealtekRTL8722DM物联网开发套件】II. 进阶:运行针对RTL8722DM MINI的示例
【RealtekRTL8722DM物联网开发套件】III. 问题与困惑,反转与感受
在通过运行示例项目,特别是针对AMB23的示例项目,对AMB23开发板进行探索时,一方面感叹开发偏重于控制的应用时,采用在Arduino平台的方便易用,另一方面也遭遇了一些困难。

1 出现问题

目前遇到的问题都与BLEUart有关。最先运行针对AMB23的BLE相关示例是电池检测服务:AMB23模拟电池检测。这个示例通过蓝牙通信将模拟的电池电压信息发送到手机端的APP,比如“nRF Connect”,每次发送的电池电压数据增1,模拟电池电压的变化。我运行这个示例的时候纯粹是瞎试,不仅对AMB23不了解,对Arduino平台也刚开始接触。当时是在运行了几个基本示例后,觉得那些示例并没有充分发挥AMB23的功能,想运行一个针对AMB23的示例试试。仅仅是机械地编译、下载、运行,整个过程顺利得令人发指,让人觉得所有的示例大概都是如此:选择示例,编译、下载、运行,很顺利,有点儿成就感,也有点儿乏味。
在浏览了几个针对AMB23的BLE示例的说明后,准备选几个试试,我选择的原则是:看起来有点儿意思而且不需要搭建太复杂的外部电路。首先选中了“AmebaBLE”下面的“PWM_over_BLEUart”,这个示例需要在AMB23端搭建一个连接RGB LED的简单电路,然后通过手机端的APP“Bluefruit Connect”控制RGB LED的颜色和亮度。编译、下载、运行过程依然顺利,在手机端也成功的连接上AMB23端设备,但是,但是,但是!连接在AMB23上的RGB LED对手机端发出的控制命令毫无反应。通过串口监视器观察,可以看到BLE的连接过程,在手机端通过APP(比如说nRF Connect)开、关“notification”时,通过串口监视器可以看到AMB23的状态信息,但当手机端APP发出改变颜色和亮度的命令时,看不到AMB23接收到控制RGB LED的命令信息。而且,很快就会在串口监视器上就会出现堆栈溢出的信息,说明AMB23上运行的程序出错了。
因为AMB23上已经成功地运行了数个示例,而“PWM_over_BLEUart”也并不是完全不能运行,似乎说明AMB23硬件和Arduino平台都没问题,又试了几个BLEUart相关的示例,都不能正常运行,我开始怀疑“PWM_over_BLEUart”示例中是否有bug?恰好手边有其他公司的开发板,在那个开发板上按照“PWM_over_BLEUart”示例做了个模拟环境,在手机端用“Bluefruit Connect”APP成功地控制了连接在开发板上的RGB LED,这似乎可以证明手机端的APP是没问题的。我把串口监视器截屏和我的疑问发到这次评测的微信群,希望能得到厂家或参与测试的网友的回应。几天以后回应来了:有网友测试了“PWM_over_BLEUart”示例,没有如何问题,示例程序运行时的所有表现包括串口监视器的输出都与预期的一致。我又回过头去重新运行这个示例,并仔细查看串口监视器的输出,果然又有新的发现:串口监视器输出的UUID总是缺字符。

Stack_overflow.png

至此,我实在是想不出问题的原因是什么,手机端APP没问题,网友的运行结果正常,说明示例的代码没问题,AMB23开发板的硬件也没问题,可在我这里,已经试了若干次就是不行,难道是我的人品问题?
评测报告写到这里,准备做些文字润色,然后带着遗憾提交到论坛,到此为止吧。
这时,反转发生了!

2 反转

在山穷水尽的时候,不知是脑子里的哪根筋的作用,忽然想到升级SDK到3.1.2版本,结果运行示例“PWM_over_BLEUart”居然一切正常了!而且运行BLEUart相关的其他示例(当然)也正常了。忽然想到,前一阶段为了运行机器学习的示例“TensorFlow Lite”曾经对SDK打过补丁(拷贝4个头文件到SDK),是否是这些补丁的问题呢?(想到这一点的过程有点儿曲折,此处略去500字)
几经周折的试验表明:如果不对SDK打补丁,编译“TensorFlow Lite”相关的示例时会产生编译错误,如果打了补丁,虽然在编译“TensorFlow Lite”相关的示例时会出现一堆警告,但可以生成可执行代码,下载、运行正常。但是,对SDK打补丁后,“BLEUart”相关的示例运行不正常(虽然编译时没有任何错误提示,顺利通过)。为什么会如此,实在是不想深入研究了。

3 几点感受

尽管我本人的评测结果不够完美,通过这次评测活动还是收获多多。首先是初步了解了Arduino平台的运作理念,掌握了基于Arduino平台进行项目开发的基本过程。此外,初步了解了REALTEK公司面向IoT应用的AmebaD硬件开发平台的资源和功能,充分利用这些资源和功能,可以开发出多种IoT应用,且开发过程比较容易上手,特别是在项目的功能不太复杂的情况下。
在评测过程中遭遇到了难以解释的问题,在设法解决问题的过程中,感觉到基于Arduino平台的开发方式对于这种底层基本功能的问题,很难精确地定位问题所在(当然很可能是因为本人对Arduino平台的了解还不够深入所致)。Arduino把基本功能封装起来,在多数情况下,特别是基本功能能够正常运作的情况下,无疑给开发者带来了方便:开发者不用关心底层如何运作,只要操心实现自己的逻辑功能就行了。可是如果基本功能不正常,由于Arduino开发环境缺乏简单易用的debug功能,使人有无从下手的感觉。



【RealtekRTL8722DM物联网开发套件】I. 通过Arduino示例热身
【RealtekRTL8722DM物联网开发套件】II. 进阶:运行针对RTL8722DM MINI的示例
【RealtekRTL8722DM物联网开发套件】III. 问题与困惑,反转与感受