打印
[uCOS/RTOS]

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

[复制链接]
3180|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如下:
# 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!)



编译,打包,下载;

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





使用特权

评论回复
板凳
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


创建产品:

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


在设备管理 选择 添加设备

手动输入设备序列号



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

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


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

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


编译,打包,烧录;

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

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


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


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


至此,麻雀一号已上云;

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



使用特权

评论回复
5
ly87802541| | 2020-6-17 23:19 | 只看该作者
ebaeab 发表于 2020-6-17 23:06
------------------------------------------------------接上期---------------------------------------- ...

原来SDK已经集成了mqtt功能,我用了添加IoT包的方式,结果编译各种报错,跑偏了方向鸭。哈哈

使用特权

评论回复
6
ebaeab|  楼主 | 2020-6-21 13:46 | 只看该作者
ly87802541 发表于 2020-6-17 23:19
原来SDK已经集成了mqtt功能,我用了添加IoT包的方式,结果编译各种报错,跑偏了方向鸭。哈哈 ...

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

使用特权

评论回复
7
ly87802541| | 2020-6-21 14:25 | 只看该作者
ebaeab 发表于 2020-6-21 13:46
哈哈,其实添加包的方式已可以的,我也打算试试ucloud提供的包,只是要注意使用menuconfig的话,需要再自 ...

那就比较麻烦了,所以我先试试microPython再说。哈哈

使用特权

评论回复
8
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控制麻雀。对接小爱,语音控制麻雀;


使用特权

评论回复
9
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的官网资料完整,大家感兴趣可以学习下;
谢谢
-------------------------------------------------------------------完结-----------------------------------------------------------------


使用特权

评论回复
10
goyhuan| | 2020-7-16 18:51 | 只看该作者
非常细心

使用特权

评论回复
11
zeshoufx| | 2020-7-17 09:19 | 只看该作者
谢谢分享【RTT ymodem升级】

使用特权

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

本版积分规则

3

主题

17

帖子

0

粉丝