[uCOS/RTOS] 【RTOS】RT-Thread应用创新设计大赛,RTT ymodem升级,添加程序...

[复制链接]
4033|10
 楼主| ebaeab 发表于 2020-6-7 12:22 | 显示全部楼层 |阅读模式
【RTOS】RT-Thread应用创新设计大赛,RTT ymodem升级,添加程序模块,wifi自动连接
使用麻雀一号开发板;
1、ymodem升级

      在文档RT-THREAD_BK7252_麻雀一号开发板使用文档中提到:


然后查看代码发现,使用ymodem的命令是update:

但是默认的编译里是没有编译ymodem的:

可以看到build目录中只有http;
且在板子终端里输入help也没有update命令;
那么如何添加ymodem呢?
首先想到就是 menuconfig:

但是发现通过menuconfig配置保存后,会导致.config中的配置变化太大,导致编译不过;
对比修改前后发现;打开ymodem只需修改:
.config中的
CONFIG_RT_USING_RYM=y

CONFIG_SAMPLE_USING_OTA_YMODEM=y
即可;
对应的rtconfig.h中添加:
/* Utilities */
#define RT_USING_RYM


/* RT-Thread OTA Samples */
#define SAMPLE_USING_OTA_YMODEM

即可;
重新编译,打包,通过http升级;
(这里插下,打包需要使用的rt_ota_packaging_tool.exe,能否开源,或提供命令行方式;这种exe鼠标点击的方式太麻烦了;)
编译成功后可以看到:
build目录中有ymodem:

升级成功后;就可以使用update命令进行ymodem方式的升级了;



--------------------------------------------------------------------------------------(先吃个饭,下午继续。。。。。)






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| ebaeab 发表于 2020-6-7 20:56 | 显示全部楼层
-------------------------------------接上文------------------------------
ymodem工具我选用的是SecureCRT:

就是ymodem的速度有点慢,不知道是串口波特率低还是例子程序的问题;-----待研究

2.添加自己的程序模块;
这里参考RT-Thread文档中心https://www.rt-thread.org/document/site/programming-manual/scons/scons/#scons_3
使用 SCons 管理工程:
在\bk7221u_release\applications目录下创建自己的文件夹放入.c .h 和SConscript


SConscript如下:
  1. # RT-Thread building script for component

  2. from building import *

  3. cwd     = GetCurrentDir()
  4. src     = Glob('*.c')
  5. libpath = [cwd]
  6. CPPPATH = [cwd]

  7. group = DefineGroup('my_iot', src, depend = [''], CPPPATH = CPPPATH, LIBPATH = libpath)

  8. Return('group')
.c如下:
  1. #include <stdio.h>
  2. #include <finsh.h>
  3. #include <rtthread.h>
  4. #include "my_iot_main.h"

  5. int iot_test(void)
  6. {
  7.     rt_kprintf("#####iot_test#####\n");

  8.     return 0;
  9. }

  10. MSH_CMD_EXPORT(iot_test, iot test!)



编译,打包,下载;

可以看到命令已加载到系统:





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| ebaeab 发表于 2020-6-7 21:23 | 显示全部楼层
3.开机自动连wifi
      在bk7221u_release\applications\main.c中添加如下代码:(参考bk7221u_release\samples\airkiss\airkiss.c)
  1. #ifdef AUTO_CONNETC_AP
  2. static void iot_wlan_sta_connected_event(struct rt_wlan_device *device, rt_wlan_event_t event, void *user_data)
  3. {
  4. <b><font color="#ff0000">    rt_kprintf("wlan sta connected event callback \n");</font></b>
  5. }

  6. static void iot_wlan_sta_disconnected_event(struct rt_wlan_device *device, rt_wlan_event_t event, void *user_data)
  7. {
  8.     rt_kprintf("wlan sta disconnected event callback \n");
  9. }

  10. static int iot_station_connect(char *ssid, char *passwd)
  11. {
  12.     rt_err_t result = RT_EOK;
  13.     struct rt_wlan_info info;
  14.     struct rt_wlan_device *wlan;
  15.     rt_tick_t tick = 0;

  16.     wlan = (struct rt_wlan_device *)rt_device_find(WIFI_DEVICE_STA_NAME);
  17.     if (!wlan)
  18.     {
  19.         rt_kprintf("no wlan:%s device\n", WIFI_DEVICE_STA_NAME);
  20.         return -1;
  21.     }

  22.     result = rt_wlan_init(wlan, WIFI_STATION);
  23.     rt_wlan_register_event_handler(wlan, WIFI_EVT_STA_CONNECTED, iot_wlan_sta_connected_event);
  24.     rt_wlan_register_event_handler(wlan, WIFI_EVT_STA_DISCONNECTED, iot_wlan_sta_disconnected_event);

  25.     rt_wlan_info_init(&info, WIFI_STATION, SECURITY_WPA2_AES_PSK, ssid);
  26.     result = rt_wlan_connect(wlan, &info, passwd);
  27.     rt_wlan_info_deinit(&info);

  28.     return result;
  29. }
  30. #endif
然后在main函数添加调用:
  1. #ifdef AUTO_CONNETC_AP
  2.     iot_station_connect("哈喽","12345678");
  3. #endif

编译,打包,下载;
开机就可看到log如下:
  1. [I/FAL] RT-Thread Flash Abstraction Layer (V0.4.0) initialize success.
  2. ROMFS File System initialized!
  3. ===sd card open:0===
  4. msh />cmd 1:3
  5. found a Ver2.00 or later SDCard
  6. support 2.7~3.6V
  7. send cmd55&cmd41 complete, card is ready
  8. Standard Capacity SD Memory Card
  9. cmd3 is ok, card rca:0x1
  10. size:200 total_block:77800
  11. Bsize:200;Total_block:77800
  12. sdcard initialize is done
  13. [SDIO]:rt_sdcard_control, CMD=16
  14. SD File System initialized!
  15. [I/FAL] The FAL MTD NOR device (filesystem) created successfully
  16. LFS Filesystem initialized! filesystem ==> /flash0
  17. [Flash]EasyFlash V3.0.4 is initialize success.
  18. [Flash]You can get the latest version on https://github.com/armink/EasyFlash .
  19. Enter normal mode...

  20. app_init finished
  21. [I/player] RT-Thread lightweight player v1.2.7-c1f72849-249590703_Release [build Sep  7 2019]
  22. set_volume 65-65
  23. adc-buf:00900dc4, adc-buf-len:5120, ch:1
  24. audio_device_mic_opened
  25. [DRV_WLAN]drivers\wlan\drv_wlan.c L917 beken_wlan_control cmd: case WIFI_INIT!
  26. [wifi_connect]: fast connect
  27. psk = 51efed97b72487536861353ba363b98d4132d5f47eddfe9f5f75fdcd96df2486
  28. [sa_sta]MM_RESET_REQ
  29. [sa_sta]ME_CONFIG_REQ
  30. [sa_sta]ME_CHAN_CONFIG_REQ
  31. [sa_sta]MM_START_REQ
  32. bssid bc-54-fc-f8-aa-4a
  33. security2cipher 2 2 16 16 security=5
  34. cipher2security 2 2 16 16
  35. hapd_intf_add_vif,type:2, s:0, id:0
  36. wpa_dInit
  37. wpa_supplicant_req_scan
  38. Setting scan request: 0.100000 sec
  39. MANUAL_SCAN_REQ
  40. wpa_supplicant_scan
  41. Cancelling scan request
  42. wpa_driver_associate
  43. scan_start_req_handler
  44. sm_auth_send:1
  45. sm_auth_handler
  46. sm_assoc_rsp_handler
  47. rc_init: station_id=0 format_mod=2 pre_type=0 short_gi=1 max_bw=0
  48. rc_init: nss_max=0 mcs_max=7 r_idx_min=0 r_idx_max=3 no_samples=10
  49. ---------SM_CONNECT_IND_ok
  50. wpa_driver_assoc_cb
  51. get_scan_rst_null
  52. Cancelling scan request
  53. get_scan_rst_null
  54. hapd_intf_add_key CCMP
  55. add sta_mgmt_get_sta
  56. sta:0, vif:0, key:0
  57. sta_mgmt_add_key
  58. add hw key idx:24
  59. hapd_intf_add_key CCMP
  60. add is_broadcast_ether_addr
  61. sta:255, vif:0, key:1
  62. add hw key idx:1
  63. ctrl_port_hdl:1
  64. [wlan_connect]:start tick =  1457, connect done tick = 1834, total = 377
  65. [wlan_connect]:start tick =  1457, connect done tick = 1840, total = 383
  66. <b><font color="#ff0000">wlan sta connected event callback </font></b>
  67. sta_ip_start

  68. configuring interface mlan (with DHCP client)
  69. dhcp_check_status_init_timer

  70. IP UP: 192.168.30.175
  71. [ip_up]:start tick =  1457, ip_up tick = 3763, total = 2306

  72. msh />


4.下期预告:
     麻雀一号上云;

谢谢大家。

 楼主| ebaeab 发表于 2020-6-17 23:06 | 显示全部楼层
------------------------------------------------------接上期------------------------------------------------------------------4.麻雀一号上云
   麻雀一号的SDK中有移植好的MQTT,而且有示例代码。可以简单配置就可连云;
   代码路径:\bk7221u_release\packages\pahomqtt\samples\mqtt_sample.c
  1. #define MQTT_URI                "tcp://iot.eclipse.org:1883"
  2. #define MQTT_CLIENTID           "rtthread-mqtt"
  3. #define MQTT_USERNAME           "admin"
  4. #define MQTT_PASSWORD           "admin"
  5. #define MQTT_SUBTOPIC           "/mqtt/test"
  6. #define MQTT_PUBTOPIC           "/mqtt/test"


云这里选用ucloud  https://www.ucloud.cn/
进入ucloud 控制台 选择 物联网通信云平台 uiot core


创建产品:

根据产品能力选择 类型,这里我选择  直连设备


在设备管理 选择 添加设备

手动输入设备序列号



进入Topic管理 添加 topic  注意  产品已发布状态无法更改Topic

根据需求 选择权限 我这里选择订阅


在设备管理界面 复制ClientID 复制UserName 复制DeviceSN 复制DeviceSecret 填入上述代码对应位置

点击Broker参数,复制mqtt 地址 填入填入上述代码对应位置


编译,打包,烧录;

一切正常的话,可以在设备管理界面看到设备已经在线,点击设备调试

在调试界面选择自定义Topic ,输入消息 ,点击发送消息


设备终端将打印接收到的消息


在日志管理界面可以看到详细的日志,设备行为等


至此,麻雀一号已上云;

下一步,则需要按照ucloud提供的API,开发云端的发送消息程序;



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
ly87802541 发表于 2020-6-17 23:19 | 显示全部楼层
ebaeab 发表于 2020-6-17 23:06
------------------------------------------------------接上期---------------------------------------- ...

原来SDK已经集成了mqtt功能,我用了添加IoT包的方式,结果编译各种报错,跑偏了方向鸭。哈哈
 楼主| ebaeab 发表于 2020-6-21 13:46 | 显示全部楼层
ly87802541 发表于 2020-6-17 23:19
原来SDK已经集成了mqtt功能,我用了添加IoT包的方式,结果编译各种报错,跑偏了方向鸭。哈哈 ...

哈哈,其实添加包的方式已可以的,我也打算试试ucloud提供的包,只是要注意使用menuconfig的话,需要再自己调整 .config文件和rtconfig.h文件中的宏(可以先保存一个副本,然后对比修改前后),麻雀开发板的sdk自带的 .config文件应该是调整过一些宏定义的;不能随便添加或裁剪;
ly87802541 发表于 2020-6-21 14:25 | 显示全部楼层
ebaeab 发表于 2020-6-21 13:46
哈哈,其实添加包的方式已可以的,我也打算试试ucloud提供的包,只是要注意使用menuconfig的话,需要再自 ...

那就比较麻烦了,所以我先试试microPython再说。哈哈
 楼主| ebaeab 发表于 2020-6-21 14:37 | 显示全部楼层
------------------------------------------------继续更新-------------------------------------------------------
5.云端demo简单开发
云端开发,需要写个接口完成前端与设备直接的联系;


麻雀一号与云之间为mqtt通讯;ucloud提供的 规则引擎 可很方便的转发消息,同步状态;


在服务器端我使用go语言简单写了个接口来负责接收 规则引擎 的消息;(代码太low就不贴了哈,全部 百度 临时学习的;)
效果就是当麻雀一号连上mqtt后,服务器将收到online;麻雀断开mqtt,服务器将收到offline;


同步了状态,那再就是前端控制麻雀了;这里ucloud提供了API可以产品管理、设备管理、Topic管理、规则引擎管理、物模型管理、上下行消息通信等功能:



按照ucloud的文档;我使用python脚本完成mqtt topic下行消息发送,控制麻雀;(代码太low就不贴了哈,全部 百度 临时学习的;)


至此,云端与麻雀已完成双向的通讯;下一步就是前端与云了;这里我找一哥们帮我搞个页面完成,感谢哥们
   
基本功能已全部完成;
下一步,本地BLE控制麻雀。对接小爱,语音控制麻雀;


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| ebaeab 发表于 2020-6-27 15:32 | 显示全部楼层
6.   BLE控制,对接小爱
   查看BK7252 DATA sheet以及RW052 WIFI 模块规格书


可以看到支持BLE4.2
但在麻雀一号开发板使用文档中只提到BLE辅助配网,

查看代码也只有开始BLE广播与注册接收回调接口

看来目前只能做到固定的gatt服务接收消息,希望后续BLE功能接口可以完善开放;
使用nRF Connect查看服务UUID:

这里的ff01就是代码中注册接收消息回调对应的uuid;
仿照BLE配网例程,编写自己的BLE通讯程序;使用微信小程序开发demo,完成BLE通信,发送控制消息;

设备收到消息:

至此,BLE控制完成;
对接 小爱同学,我使用了第三方对接平台blinker https://diandeng.tech/home 完成;这里就不具体说了;blinker的官网资料完整,大家感兴趣可以学习下;
谢谢
-------------------------------------------------------------------完结-----------------------------------------------------------------


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
goyhuan 发表于 2020-7-16 18:51 | 显示全部楼层
非常细心
zeshoufx 发表于 2020-7-17 09:19 | 显示全部楼层
谢谢分享【RTT ymodem升级】
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

17

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部