Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
网络学习营
【网络编程学习】+ Eric + rt1052野火mini- AT 网络编程与遇到...
发布于 2018-08-09 23:21:41 浏览:3241
订阅该版
[tocm] * 本帖最后由 EricYYG 于 2018-8-9 23:30 编辑 * 文本排版布局有些乱,可以看附件pdf较为清晰 # 软件硬件准备 - rthtead源码最新 - 野火rt1052mini开发板 - esp8266模块  7.png # muneconfig配置  3.png  4.png 配置完成后生成工程:scons --target=mdk5 -s 点击打开mkd工程  5.png  6.png # 命令行下使用AT指令测试模块是否正常连接 输入 at client 进入测试界面 在接着输入AT+GMR获取WiFi模块版本信息  8.png 如上图:模块连接正常,指令发送成功 # 任务一:在开发板上运行起 RT-Thread,使能 AT 组件,能够通过 ESP8266 模块接入网络 1. menuconfig配置 AT 组件配置选项介绍如下: - Enable debug log output:开启调试日志; - Enable AT commands server:开启 AT 服务端 - Enable AT commands client:开启 AT 客户端; - Client device name:配置与 AT 模块通信用的串口; - The maximum length of client data accepted:配置 AT客户端单次接收数据最大长度; - Enable command‐line interface for AT commands:开启和关闭 AT CLI 模式 - Enable print RAW format AT command communication data: 开启收发数据实时打印功能。  9.png SAL 配置选项介绍如下: - protocol stack implement:配置 SAL 支持的协议栈实现方式 - Enable BSD socket operated by file system API:开启标准 BSD socket - the number of protocol family:配置最多支持的协议栈的个数  10.png 开启AT组件实现协议栈 选择对应的wifi模块ESP8266,填入相应的WiFi账号和密码  11.png 2. 编译运行查看结果 使用finsh命令at_ping百度看看,成功ping通证明模块初始化成功。  12.png 3. 代码分析 URC数据列表,用于处理wifi模块主动下发相关信息,根据数据头尾,自动跑到相关的处理函数中 static struct at_urc urc_table[] = { {"SEND OK", "
", urc_send_func}, {"SEND FAIL", "
", urc_send_func}, {"Recv", "bytes
", urc_send_bfsz_func}, {"", ",CLOSED
", urc_close_func}, {"+IPD", ":", urc_recv_func}, {"busy p", "
", urc_busy_p_func}, {"busy s", "
", urc_busy_s_func}, {"WIFI CONNECTED", "
", urc_func}, {"WIFI DISCONNECT", "
", urc_func}, }; ESP8266初始化 /* AT client port initialization */ int at_client_port_init(void) { /* create current AT socket event */ at_socket_event = rt_event_create("at_sock_event", RT_IPC_FLAG_FIFO); if (!at_socket_event) { LOG_E("RT AT client port initialize failed! at_sock_event create failed!"); return -RT_ENOMEM; } /* create current AT socket lock */ at_event_lock = rt_mutex_create("at_event_lock", RT_IPC_FLAG_FIFO); if (!at_event_lock) { LOG_E("RT AT client port initialize failed! at_sock_lock create failed!"); rt_event_delete(at_socket_event); return -RT_ENOMEM; } /* register URC data execution function */ at_set_urc_table(urc_table, sizeof(urc_table) / sizeof(urc_table[0])); return RT_EOK; } # 任务二:能够通过 http client 组件从网络下载文件保存到开发板文件系统中 1. 背景介绍 HTTP 协议是互联网上应用最为广泛的一种网络协议,越来越多的应用程序需要直接通过 HTTP 协议来访问网络资源。webclient 是 RT-Thread 上实现的一个 HTTP 客户端,用来提供高效且功能丰富的 HTTP 客户端编程工具包。 2. 开启 WebClient 软件包 webclient 是一个 HTTP 协议的客户端工具 ,利用这个工具可以完成与 HTTP 服务器的通信。  14.png 3. 编写代码,使用webclient下载文件 #include
/* 使用 HTTP 协议与服务器通信需要包含此头文件 */ #include
/* 使用BSD socket,需要包含socket.h头文件 */ #include
#define BUF_SZ 4096 //缓冲区大小 #define HTTP_CONNET_RETRY_MAX 100 //尝试重连最大次数 void http_client_download(void) { rt_uint8_t *ptr = RT_NULL; int length = 0, result, retry; int fd = -1; int offset; struct webclient_session *session = RT_NULL; char *download_url = "http://183.193.243.90:9012/www/rt-thread.txt"; //rt_thread_delay(RT_TICK_PER_SECOND * 10); /* 为结构体 webclient_session 分配空间 */ session = (struct webclient_session *)rt_calloc(1, sizeof(struct webclient_session)); if (!session) { rt_kprintf("No memory for session structure!
"); goto __exit; } /* 连接天气网站 */ rt_kprintf("Webclient connect URI(%s) .", download_url); for(retry = 0; retry < HTTP_CONNET_RETRY_MAX; retry++) { result = webclient_connect(session, download_url); if (result < 0) { rt_kprintf("."); rt_thread_delay(RT_TICK_PER_SECOND * 5); if(retry == (HTTP_CONNET_RETRY_MAX - 1)) { rt_kprintf("Webclient connect URI(%s) failed %d!
", download_url, retry); goto __exit; } } else { rt_kprintf("
"); break; } } /* 发送官方标准 header */ result = webclient_send_header(session, WEBCLIENT_GET, RT_NULL, RT_NULL); if (result < 0) { rt_kprintf("Webclient send header buffer failed return %d!", result); goto __exit; } /* 检查响应 */ if (webclient_handle_response(session)) { if (session->response != 200) { rt_kprintf("webclient handle response(%d) error!", session->response); goto __exit; } } fd = open("/rt-thread.txt", O_WRONLY | O_CREAT, 0); if (fd < 0) { /* 创建文件出错,返回 */ rt_kprintf("open file failed
"); goto __exit; } /* 分配用于存放接收数据的缓冲 */ ptr = rt_calloc(1, BUF_SZ); if(!ptr) { rt_kprintf("No memory for data receive buffer!
"); goto __exit; } /* 接受数据打印 */ rt_kprintf("download url: %s lenght: %d
", download_url, session->content_length); if(session->content_length == 0) { /* 如果服务端未给出数据内容长度,读取数据直到服务端关闭连接 */ while (1) { length = webclient_read(session, ptr, BUF_SZ); if (length > 0) { write(fd, ptr, length); ptr[length] = '\0'; rt_kprintf("%s", ptr); } else { rt_kprintf("
"); break; } } } else { for (offset = 0; offset < session->content_length; ) { /* 从连接读取数据 */ length = webclient_read(session, ptr, session->content_length - offset > BUF_SZ? BUF_SZ:session->content_length - offset); /* 写入到文件中 */ if (length > 0) { write(fd, ptr, length); ptr[length] = '\0'; rt_kprintf("%s", ptr); } else { rt_kprintf("
"); break; } /* 挪动偏移位置 */ offset += length; } } __exit: /* 关闭会话 */ if (session != RT_NULL) webclient_close(session); if (fd >= 0) close(fd); /* 释放缓冲区空间 */ if (ptr != RT_NULL) rt_free(ptr); } #ifdef FINSH_USING_MSH #include
MSH_CMD_EXPORT(http_client_download, Download file by webclient); #endif 下载成功:  17.png # 错误与解决办法 - 错误:Contents mismatch at: 6000000CH (Flash=01H Required=03H) !  1.png 原因:没有选择对应的开发板 解决:选择对应的开发版  2.png - 错误:[E/AT] The client porting initialize for AT client is not implement. 原因:提示你at client 还没有自行移植初始化 解决:自行初始化本函数 - 错误: [E/AT] socket (0) send failed, wait connect result timeout.  22.png 原因:未知 解决:关闭RAW调试  19.png - 错误:无法下载文件,提示许多异常  15.png 原因:未知 解决:更新rtthread源码 + pkgs --upgrade + pkgs --update + 关闭RAW调试 
查看更多
2
个回答
默认排序
按发布时间排序
armink
2018-08-10
这家伙很懒,什么也没写!
开启 RAW 命令调试,要记得把调试串口的波特率提高,比如:921600,保证不会影响到 AT 串口的接收时序。 你的最后一个问题,得配合 RAW 日志分析
EricYYG
2018-08-11
这家伙很懒,什么也没写!
>开启 RAW 命令调试,要记得把调试串口的波特率提高,比如:921600,保证不会影响到 AT 串口的接收时序。 > > ... --- thank you,问题解决了 [md]``` int imxrt_hw_uart_init(void) { struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT; #ifdef AT_PRINT_RAW_CMD struct serial_configure RAW_uart_config = {\ BAUD_RATE_921600, /* 921600 bits/s */ \ DATA_BITS_8, /* 8 databits */ \ STOP_BITS_1, /* 1 stopbit */ \ PARITY_NONE, /* No parity */ \ BIT_ORDER_LSB, /* LSB first sent */ \ NRZ_NORMAL, /* Normal mode */ \ RT_SERIAL_RB_BUFSZ, /* Buffer size */ \ 0 \ }; #endif int i; /* Configure UART divider to default */ CLOCK_SetMux(kCLOCK_UartMux, 0); /* Set UART source to PLL3 80M */ CLOCK_SetDiv(kCLOCK_UartDiv, 0); /* Set UART divider to 1 */ for (i = 0; i < sizeof(uarts) / sizeof(uarts[0]); i++) { uarts[i].serial->ops = &imxrt_uart_ops; #ifdef AT_PRINT_RAW_CMD if(rt_strcmp(uarts[i].device_name, RT_CONSOLE_DEVICE_NAME) == 0) uarts[i].serial->config = RAW_uart_config; else #endif uarts[i].serial->config = config; /* register UART device */ rt_hw_serial_register(uarts[i].serial, uarts[i].device_name, RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, (void *)&uarts[i]); } return 0; } ```[/md]
撰写答案
登录
注册新账号
关注者
0
被浏览
3.2k
关于作者
EricYYG
这家伙很懒,什么也没写!
提问
13
回答
9
被采纳
0
关注TA
发私信
相关问题
1
【LWIP学习营】第一关开发环境搭建
2
LWIP学习营第一周入门移植问题汇总贴
3
【LWIP学习营】f407+lan8720A小结
4
【LwIP学习营】【第一周】仅零散记录,无主题
5
【LWIP学习营】正点原子探索者F407+LAN8720第一周小结
6
【LwIP学习营】【第一周】网络通信基础及实现TCP 聊天客户端
7
【LwIP学习营】【第一周】LWIP移植
8
【LwIP学习营】【第一周】LWIP移植
9
【LwIP学习营】【第一周】开发板适配
10
【LwIP学习营】【第一周】环境搭建和配置验证
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
【面向零基础】基于星火1号开发板从头学习基于RT-Thread的嵌入式开发 第一讲
2
新版OneNet的星火1号开发板例程适配(下)
3
基于RT-Thread的STM32F4开发第六讲——PWM输出(CH1和CH1N)
4
RT-Thread 携手 Copilot:智能代码审查,加速开源协作
5
重磅预售!RT-Trace调试工具
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
FAL
RTC
rt-smart
I2C_IIC
cubemx
UART
ESP8266
WIZnet_W5500
ota在线升级
BSP
PWM
flash
packages_软件包
freemodbus
潘多拉开发板_Pandora
GD32
ADC
定时器
编译报错
flashDB
keil_MDK
socket
中断
rt_mq_消息队列_msg_queue
Debug
ulog
SFUD
msh
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
6
个答案
3
次被采纳
xiaorui
3
个答案
1
次被采纳
yans
2
个答案
1
次被采纳
tjrong
1
个答案
1
次被采纳
miandian_7
1
个答案
1
次被采纳
本月文章贡献
Pai同学
8
篇文章
11
次点赞
Rick98
3
篇文章
10
次点赞
RTT_逍遥
2
篇文章
10
次点赞
加缪
1
篇文章
2
次点赞
河南理工大学恁带劲儿
1
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部