[uCOS/RTOS]

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

[复制链接]
2213|10
手机看帖
扫描二维码
随时随地手机跟帖
ebaeab|  楼主 | 2020-6-7 12:22 | 显示全部楼层 |阅读模式
【RTOS】RT-Thread应用创新设计大赛,RTT ymodem升级,添加程序模块,wifi自动连接
使用麻雀一号开发板;
1、ymodem升级

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

然后查看代码发现,使用ymodem的命令是update:
update.jpg
但是默认的编译里是没有编译ymodem的:
update2.jpg
可以看到build目录中只有http;
且在板子终端里输入help也没有update命令;
那么如何添加ymodem呢?
首先想到就是 menuconfig:
ymodem2.jpg
但是发现通过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:
ymodem3.jpg
升级成功后;就可以使用update命令进行ymodem方式的升级了;
update3.jpg


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






使用特权

评论回复

相关帖子

ebaeab|  楼主 | 2020-6-7 20:56 | 显示全部楼层
-------------------------------------接上文------------------------------
ymodem工具我选用的是SecureCRT:
update4.jpg
就是ymodem的速度有点慢,不知道是串口波特率低还是例子程序的问题;-----待研究

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

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

from building import *

cwd     = GetCurrentDir()
src     = Glob('*.c')
libpath = [cwd]
CPPPATH = [cwd]

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

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

int iot_test(void)
{
    rt_kprintf("#####iot_test#####\n");

    return 0;
}

MSH_CMD_EXPORT(iot_test, iot test!)



编译,打包,下载;

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




使用特权

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

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

static int iot_station_connect(char *ssid, char *passwd)
{
    rt_err_t result = RT_EOK;
    struct rt_wlan_info info;
    struct rt_wlan_device *wlan;
    rt_tick_t tick = 0;

    wlan = (struct rt_wlan_device *)rt_device_find(WIFI_DEVICE_STA_NAME);
    if (!wlan)
    {
        rt_kprintf("no wlan:%s device\n", WIFI_DEVICE_STA_NAME);
        return -1;
    }

    result = rt_wlan_init(wlan, WIFI_STATION);
    rt_wlan_register_event_handler(wlan, WIFI_EVT_STA_CONNECTED, iot_wlan_sta_connected_event);
    rt_wlan_register_event_handler(wlan, WIFI_EVT_STA_DISCONNECTED, iot_wlan_sta_disconnected_event);

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

    return result;
}
#endif
然后在main函数添加调用:
#ifdef AUTO_CONNETC_AP
    iot_station_connect("哈喽","12345678");
#endif

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

app_init finished
[I/player] RT-Thread lightweight player v1.2.7-c1f72849-249590703_Release [build Sep  7 2019]
set_volume 65-65
adc-buf:00900dc4, adc-buf-len:5120, ch:1
audio_device_mic_opened
[DRV_WLAN]drivers\wlan\drv_wlan.c L917 beken_wlan_control cmd: case WIFI_INIT!
[wifi_connect]: fast connect
psk = 51efed97b72487536861353ba363b98d4132d5f47eddfe9f5f75fdcd96df2486
[sa_sta]MM_RESET_REQ
[sa_sta]ME_CONFIG_REQ
[sa_sta]ME_CHAN_CONFIG_REQ
[sa_sta]MM_START_REQ
bssid bc-54-fc-f8-aa-4a
security2cipher 2 2 16 16 security=5
cipher2security 2 2 16 16
hapd_intf_add_vif,type:2, s:0, id:0
wpa_dInit
wpa_supplicant_req_scan
Setting scan request: 0.100000 sec
MANUAL_SCAN_REQ
wpa_supplicant_scan
Cancelling scan request
wpa_driver_associate
scan_start_req_handler
sm_auth_send:1
sm_auth_handler
sm_assoc_rsp_handler
rc_init: station_id=0 format_mod=2 pre_type=0 short_gi=1 max_bw=0
rc_init: nss_max=0 mcs_max=7 r_idx_min=0 r_idx_max=3 no_samples=10
---------SM_CONNECT_IND_ok
wpa_driver_assoc_cb
get_scan_rst_null
Cancelling scan request
get_scan_rst_null
hapd_intf_add_key CCMP
add sta_mgmt_get_sta
sta:0, vif:0, key:0
sta_mgmt_add_key
add hw key idx:24
hapd_intf_add_key CCMP
add is_broadcast_ether_addr
sta:255, vif:0, key:1
add hw key idx:1
ctrl_port_hdl:1
[wlan_connect]:start tick =  1457, connect done tick = 1834, total = 377
[wlan_connect]:start tick =  1457, connect done tick = 1840, total = 383
<b><font color="#ff0000">wlan sta connected event callback </font></b>
sta_ip_start

configuring interface mlan (with DHCP client)
dhcp_check_status_init_timer

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

msh />


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

谢谢大家。

使用特权

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


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

创建产品:
ucloud2.jpg
根据产品能力选择 类型,这里我选择  直连设备
ucloud3.jpg

在设备管理 选择 添加设备
ucloud4.jpg
手动输入设备序列号
ucloud5.jpg


进入Topic管理 添加 topic  注意  产品已发布状态无法更改Topic
ucloud6.jpg
根据需求 选择权限 我这里选择订阅
ucloud7.jpg

在设备管理界面 复制ClientID 复制UserName 复制DeviceSN 复制DeviceSecret 填入上述代码对应位置
ucloud13.jpg
点击Broker参数,复制mqtt 地址 填入填入上述代码对应位置
ucloud14.jpg ucloud15.jpg

编译,打包,烧录;

一切正常的话,可以在设备管理界面看到设备已经在线,点击设备调试
ucloud8.jpg
在调试界面选择自定义Topic ,输入消息 ,点击发送消息
ucloud9.jpg

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

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

至此,麻雀一号已上云;

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


使用特权

评论回复
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简单开发
云端开发,需要写个接口完成前端与设备直接的联系;

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

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

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


ucloud22.jpg
按照ucloud的文档;我使用python脚本完成mqtt topic下行消息发送,控制麻雀;(代码太low就不贴了哈,全部 百度 临时学习的;)
ucloud23.jpg
ucloud24.jpg
至此,云端与麻雀已完成双向的通讯;下一步就是前端与云了;这里我找一哥们帮我搞个页面完成,感谢哥们
ucloud25.jpg     ucloud26.jpg
基本功能已全部完成;
下一步,本地BLE控制麻雀。对接小爱,语音控制麻雀;


使用特权

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

bk1.jpg bk2.jpg
可以看到支持BLE4.2
但在麻雀一号开发板使用文档中只提到BLE辅助配网,
bk3.jpg
查看代码也只有开始BLE广播与注册接收回调接口
bk4.jpg
看来目前只能做到固定的gatt服务接收消息,希望后续BLE功能接口可以完善开放;
使用nRF Connect查看服务UUID:
bk5.jpg
这里的ff01就是代码中注册接收消息回调对应的uuid;
仿照BLE配网例程,编写自己的BLE通讯程序;使用微信小程序开发demo,完成BLE通信,发送控制消息;
Screenshot_20200627_141851_com.tencent.mm.jpg
设备收到消息:
bk6.jpg
至此,BLE控制完成;
对接 小爱同学,我使用了第三方对接平台blinker https://diandeng.tech/home 完成;这里就不具体说了;blinker的官网资料完整,大家感兴趣可以学习下;
谢谢
-------------------------------------------------------------------完结-----------------------------------------------------------------


使用特权

评论回复
goyhuan| | 2020-7-16 18:51 | 显示全部楼层
非常细心

使用特权

评论回复
zeshoufx| | 2020-7-17 09:19 | 显示全部楼层
谢谢分享【RTT ymodem升级】

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则