【炫技】MicroPython 在 MT2625/NB-IoT 上的应用

先前的文章 人生苦短,用 RT-Thread MicroPython 享受编程的乐趣中已经介绍了 MicroPython 在应用开发中的优势,So,MicroPython 能在蜂窝模块里大展身手吗?

图片来源:骑士智能(已取得授权)

应用背景

蜂窝模块一直就是开发的噩梦,门槛高、SDK 庞大,大部分模块厂家都还是仅提供 AT 指令的开发方式,大大限制了应用开发的灵活性,蜂窝模块基本上会遇到以下开发难题:

  • AT 指令方式开发繁琐,还需要外加一颗 MCU

  • OpenCPU SDK 过度封装(基本都是库)

  • OpenCPU SDK 开发环境搭建复杂,经常遇到无解问题

  • 应用代码不能复用

  • 学习成本高

基于以上问题,RT-Thread 基于中移 M5311 NBIOT 模块移植了 RT-Thread 系统,基于 RT-Thread 版本的 NBIOT SDK,开发者无需关注 NBIOT 网络本身,直接使用熟悉的 scons 工具和 menuconfig 工具进行编译构建,使用 BSD socket 进行网络应用开发,能够使用几乎所有的 RT-Thread 软件包,跟基于以太网应用的开发方式没有任何的区别

RT-Thread 版本的 NBIOT SDK 已经解决了上述开发难题,更好的消息是 RT-Thread 在 NBIOT 上引入了 MicroPython 开发

接下来,本文基于 TCP 示例带大家体验 RT-Thread BSD socket 开发方式和 MicroPython 开发方式的差异,感受 MicroPython 给应用开发带来的便利。

传统 C 语言 SOCKET 开发方式

该示例程序与 www.rt-thread.com 服务器建立 tcp 通讯,并拉去服务器内容。

通过 tcp 构建 HTTP GET 请求,本示例将请求 www.rt-thread.com 服务器的 rt-thread.txt 资源,请求内容如下:

1static const char *req_data = "GET /service/rt-thread.txt HTTP/1.1\r\nHost: www.rt-thread.com\r\nUser-Agent: rtthread/4.0.1 rtt\r\n\r\n";

废话不说,直接上完整代码:

 1#include <rtthread.h>
 2
 3#ifdef RT_USING_SAL
 4#include <sys/socket.h> 
 5#include <netdb.h>
 6#include "sal_tls.h"
 7#include "sys/time.h"
 8#else
 9#include "lwip/sockets.h"
10#include "lwip/netdb.h"
11#include "lwip/sys.h"
12#include "lwip/inet.h"
13#endif /* RT_USING_SAL */
14
15#define TCP_TEST_HOST    "www.rt-thread.com"
16#define TCP_TEST_PORT    (80u)
17#define TEST_BUFSZ       (1024u)
18
19static const char *req_data = "GET /service/rt-thread.txt HTTP/1.1\r\nHost: www.rt-thread.com\r\nUser-Agent: rtthread/4.0.1 rtt\r\n\r\n";
20static char recv_data[TEST_BUFSZ];
21
22static void nb_tcp_demo(int argc, char** argv)
23{
24    int ret;
25    int sock = -1;
26    struct hostent *host;
27    struct sockaddr_in server_addr;
28    int bytes_received;
29
30    host = gethostbyname(TCP_TEST_HOST);
31    if (!host) { return; }
32
33    if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
34    {
35        goto __exit;
36    }
37
38    server_addr.sin_family = AF_INET;
39    server_addr.sin_port = htons(TCP_TEST_PORT);
40    server_addr.sin_addr = *((struct in_addr *)host->h_addr);
41    rt_memset(&(server_addr.sin_zero), 0, sizeof(server_addr.sin_zero));
42
43    if ((ret = connect(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr))) < 0)
44    {
45        goto __exit;
46    }
47
48    ret = send(sock, req_data, rt_strlen(req_data), 0);
49    if (ret <= 0)
50    {
51        goto __exit;
52    }
53    rt_kprintf("send len: %d\r\n", ret);
54
55    rt_memset(recv_data, 0x0, sizeof(recv_data));
56    bytes_received = recv(sock, recv_data, TEST_BUFSZ  - 1, 0);
57    if (bytes_received <= 0)
58    {
59        goto __exit;
60    }
61
62    rt_kprintf("received data: \n");
63    for (int i = 0; i < bytes_received; i++)
64    {
65        rt_kprintf("%c", recv_data[i]);
66    }
67    rt_kprintf("\r\n");
68
69__exit:
70    if (sock >= 0)
71    {
72        closesocket(sock);
73        sock = -1;
74    }
75
76    rt_kprintf("TCP demo end\r\n");
77}
78#ifdef FINSH_USING_MSH
79MSH_CMD_EXPORT_ALIAS(nb_tcp_demo, demo_tcp, nbiot tcp test);
80#endif /* FINSH_USING_MSH */

好在 RT-Thread 支持 BSD socket 进行网络开发,方便许多,在 MSH 串口命令行的加持下,可以直接像 Linux 一样直接在命令行运行程序。

这里请注意代码量,与后面的 MicroPython 进行对比。

程序运行和结果请观看文末的视频!

MicroPython 开发方式

不扯别的,只看代码:

 1import usocket
 2
 3req_url = 'www.rt-thread.com'
 4req_port = 80
 5req_data = 'GET /service/rt-thread.txt HTTP/1.1\r\nHost: www.rt-thread.com\r\nUser-Agent: rtthread/4.0.1 rtt\r\n\r\n'
 6
 7client = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM)
 8client.connect(usocket.getaddrinfo(req_url, req_port)[0][-1])
 9ret = client.send(req_data.encode())
10print("send len:%d" % (ret))
11
12recv_data = client.recv(1024)
13print("received data: %s" % (recv_data.decode()))
14
15client.close()
16print("TCP DEMO END")

额,就这么点代码?

是的,同样的功能,MicroPython 程序就仅有 12 行代码,美滋滋!

相比 C 语言实现的 70 行代码,MicroPython 的 12 行代码不要太爽!

同时,基于 RT-Thread 提供的 MicroPython VSCode 插件,MicroPython 在硬件上的开发更便捷,不信来看下面的视频,刷新你的认识。

程序运行和结果请观看文末的视频!

完整的演示视频

温馨提示:视频最后有彩蛋,一定要看到最后哦。


如视频所示,MicroPython 的开发优势一目了然,还不来试试吗?

End

拓展阅读

RT-Thread 近期活动

RT-Thread能力认证报名

现在报名即享三重福利,1、报名即可以领取往期能力认证培训资料大礼包 2、参与新能力认证考前培训 3、学生优惠价168元 4、企业团体报名优惠,198/人(企业报名请加QQ:2433970767)

扫码报名

企业人才服务

在这个特殊时期,针对人才服务RT-Thread将开放更多的资源,如果你的企业在招聘嵌入式相关人才,可提交职位信息说明,RT-Thread将会通过微信公众号免费发布相关职位信息(要求RT-Thread技能的职位优先发布)

请详细登记您的职位信息,我们将尽快联系你确认岗位描述信息,安排发布


扫码即可提交需求

你可以添加微信17775982065为好友,注明:公司+姓名,拉进 RT-Thread 官方微信交流群!

RT-Thread


让物联网终端的开发变得简单、快速,芯片的价值得到最大化发挥。Apache2.0协议,可免费在商业产品中使用,不需要公布源码,无潜在商业风险。

长按二维码,关注我们

点击阅读原文,进入RT-Thread GitHub 

你点的每个“在看”,我都认真当成了喜欢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值