请教!有关CH582M MESH例程的应用

您好,我这儿测试还是正常的,板子都断电再上电后也是正常。

对于您说的几分钟后才会收到消息,可以打印一下seq数值,如果上电时没有自增60,建议您更新一下最新EVT,使用最新库。

01a43bbd251eb364e709e1bdc995087.png

Screenshot-4ad6ad5c-c50f-4b2a-8d6e-cc08a78d364c.png


TECH_JW您好!

   1)、打印seq数值,这个代码需要自己来实现是吧?有参考例程么?该放在什么位置打印?

   2)、更新EVT,目前网站上只有1.5版2022-08-31这个是最新版了吧,目前。



您好,以官网为准,目前最新EVT是8月31日更新的该版本。常用API在MESH_LIB.h中都能找到。

最新EVT中有uint32_t bt_mesh_seq_get( void ); 这个函数,在发包之后可以调用看看seq num有没有+1,断电重启之后,seq num有没有+60。如果发包的seq num比对方节点收到的上一则消息的seq num小,则会判断为过往消息,在底层忽略掉。

另有IV值获取接口uint32_t bt_mesh_iv_index_get( void ); 可以用它获取两边的IV值情况。如果IV值不同步,也会造成丢包。

在app_vendor_model_srv中,vendor_message_srv_trans函数下可以打印一下tid值,看看tid是否每次发包都+1,若tid一直不变,被判断为重复消息,不再上报也会导致丢包。


您好!终于找到坑了,之前只是重复烧写self_provisioner_vendor而没有每次都烧写adv_vendor_friend,所以一直莫名其妙的问题。测试如下:

1.png2.png我在 App_ProcessEvent(uint8_t task_id, uint16_t events)函数中添加了

     bt_mesh_seq_get();

     APP_DBG("Print Test 2\r\n");

运行后只见打印Print Test 2没见到其它信息,是没有正确调用么?打印信息如下:

3.png



bt_mesh_seq_get();这个函数是有uint32_t类型的返回值的。定义一个局部变量X,X = bt_mesh_seq_get();,然后打印X的数值这样用。


您好!我现在的系统结构打算这样,如下图:

5.png

现在几点问题请教如下:

1)、MCU通过Uart从CH852读取终端的数据,在函数static void vendor_model_cli_rsp_handler(const vendor_model_cli_status_t *val)中来实现。

2、MCU通过Uart通过CH852向终端发送平台下发的数据,在函数uint16_t App_ProcessEvent(uint8_t task_id, uint16_t events)中来添加代码实现。

           目前我要做的就是通过CH582的Uart通讯代码,把数据周转、传送就可以了是吧?


是的。另外我司有CH32V208芯片,有网络接口和无线功能。


好的,暂时先用手里现有的MCU和CH582来实现代码,后期购买其它芯片时一起买208吧;Uart的代码还需要自己来实现吗?还是在这个例程里有,直接调用呢?谢谢!


可以参考BLE-UART例程,看看该例程中是怎么在TMOS系统中使用UART的。


好的,谢谢!


唉!感觉没几个例程是可以顺遛运行的。BLE_UART例程烧写后,蓝牙调试器设置如截图:

6.jpg

蓝牙助手发数据,串口助手打印的信息如下图:

4.png

串口助手发信息,APP也收不到,该怎么处理?


BLE_UART下提供了一份说明,请仔细阅读后进行验证;

应用商城下载BLE调试助手进行连接验证。

关于TMOS使用方式请直接查看该博客:

WCH TMOS用法详解 - debugdabiaoge - 博客园 (cnblogs.com)



若要实现通过串口来交互传输数据,是不要模仿BLE_UART里的结构,在self_provisioner_vendor例程里添加app_drv_fifo.c、app_drv_fifo.h、ble_uart_service_16bit.c、ble_uart_service.h等文件进来?



您好,mesh也是基于TMOS系统运行的,故可以参考BLE_UART的程序进行移植。在移植之前可以现了解一下TMOS系统的使用,参考上面发过的博客。


只有登录才能回复,可以选择微信账号登录