最近项目要用到cat1模块,之前使用过这个模块,但是是有MCU的,所以只需要知道如何发送正确的AT指令即可。

现在是需要对这个cat1模块进行二次开发,在这个过程中学到了什么进行总结。

这次使用的合宙的Air724UG开发板。这个模块只有4G功能。

在学习过程中,参考了这位大佬的教程,非常好,合宙开发。学习过程中是官方的代码和他的代码结合起来学习,主要以官方的为主!!!!

官方代码:https://gitee.com/openLuat/Luat_CSDK_Air724U

1.环境搭建

具体搭建的话可以参考官方文档,官方文档都已经给出了。这里主要写一些需要注意的地方或者已经踩坑的地方。

1.1 监视软件

合宙官方这套系统没有debug的功能,所以只能在代码中加入打印信息来进行调试。使用的coolwatcher

但是刚开始在实际使用过程中,经常会碰到打印信息不全或者没有的情况。例如:打印10次hello world,总是不能全部都打印出来,总是会少几次。但是使用while(1)就可以一直打印。

后来经过问技术支持之后,发现调试软件不是官方说的那么打印,需要接串口打印,这样才能全部都能输入出来。(可能运行速度快,监视软件没跟上打印)

需要在host_tx host_rx接上串口调试助手。这样就能全部打印出来了。

1.2 打印信息

还有就是在下载代码之后,进入调试助手之前,其实要发送AT指令的,然后再复位,才能在监视软件上看到打印信息。但是每次发送之前就很烦,可以在代码里面加上这个AT指令,这样就可以避免每次都发AT指令。

但是有个要注意:要注册联网的时候,一定要加在回调函数之后,不然会出现联网不成功现在。如果不涉及联网,那么是可以加在开头的地方。

2.与基站联网和DNS

其实这个DNS解析只是很小的一部分,当连上网之后,只要将想相应的网址扔进去,自然就能解析。重点是在联网过程,这里联网指的是连上基站。

iot_network_set_cb()这个函数是来初始线程信息和回调函数的。

at_regNetStatueCb()函数是设置回调的。

BOOL iot_network_set_cb(F_OPENAT_NETWORK_IND_CB indCb)
{if(at_init_flag==0){    at_init();at_init_flag=1;}at_regNetStatusCb(gsmStatusCb);   g_s_gsmStatusCb = indCb;
}        void demo_socket_init(void)
{ socket_dbg("[socket] demo_socket_init");//????????????????iot_network_set_cb(demo_networkIndCallBack);g_s_socket_task = iot_os_create_task(demo_socket_task,NULL,4096,5,OPENAT_OS_CREATE_DEFAULT,"demo_socket");
}

只要弄清楚这个回调函数就可以非常容易理解联网过程了。

结合代码可以看到这个   demo_networkIndCallBack是一个函数,是用来判断连接状态,回复消息的。

static void demo_networkIndCallBack(E_OPENAT_NETWORK_STATE state)
{DEMO_SOCKET_MESSAGE* msgptr = iot_os_malloc(sizeof(DEMO_SOCKET_MESSAGE));socket_dbg("[socket] network ind state %d", state);if(state == OPENAT_NETWORK_LINKED){msgptr->type = SOCKET_MSG_NETWORK_LINKED;iot_os_send_message(g_s_socket_task, (PVOID)msgptr);return;}else if(state == OPENAT_NETWORK_READY){msgptr->type = SOCKET_MSG_NETWORK_READY;iot_os_send_message(g_s_socket_task,(PVOID)msgptr);return;}iot_os_free(msgptr);
}

总结一下:

  • gsmStatusCb()是一个函数,作用是发送AT来获取和基站连接的信息
  • demo_networkIndCallBack()也是一个函数,来解析现在是什么状态,获取现在是什么联网状态。

当初始化完毕之后,就可以创建线程来做一些应用层方面的东西了。

这里可以看到获取联网状态是阻塞式的,当ready状态时,就会去进行pdp激活,根据不同运行商,apn的值是不同的。但是经过测试其实724这个不需要填apn的值也能联网成功。

pdp激活三个步骤:pdp附着--->pdp上下文激活--->业务访问。

但是因为724只有4G没有2G,所以不需要这个步骤,看代码:

在第一个if就能return了,下面else if才是pdp激活过程。

当返回TRUE说明联网成功了,就可以进行DNS解析了。

调用gethostbyname()函数就能解析网址了,底层用的是lwip。

3.TCP

在这只能作为客户端进行TCP通信。根据定义测试的服务器地址和端口号来发送数据。

具体流程是这样的:

底层的lwip协议解析可以参考这个:LWIP中socket接口

合宙Air724UG Cat1(4G)CSDK 二次开发总结(DNS TCP)相关推荐

  1. 合宙Air724UG二次开发(1):搭建开发环境

    合宙Air724UG二次开发(1):搭建开发环境 文章目录 合宙Air724UG二次开发(1):搭建开发环境 1. 系统环境 2. 嵌入式4G发展现状 3. 合宙Air724UG支持Lua开发实现原理 ...

  2. 微信小程序+阿里物联平台+合宙Air724UG搭建无服务器物联系统(五)---合宙Air724UG 4G cat.1硬件设计开源

    首先,感谢某立创平台的开源支持及免费硬件PCB支持,废话不多说直接上硬件开源链接:希望平台能够开放该链接!!! RYK_OPEN_20220212 - 立创EDA开源硬件平台 立创EDA开源硬件平台, ...

  3. 微信小程序+阿里物联平台+合宙Air724UG搭建无服务器物联系统(二)---阿里物联平台搭建

    微信小程序+阿里物联平台+合宙Air724UG搭建无服务器物联系统,核心为阿里物联平台,该平台作为物联网应用的中台,承担了百万级设备链接及负载均衡等功能,解决了物联网设备链接的多连接.少数据量.长链接 ...

  4. 微信小程序+阿里物联平台+合宙Air724UG搭建无服务器物联系统(三)---微信小程序直连阿里物联平台AliIoT

    前一段时间集中设计系统整体方案,物联网平台搭建.小程序编写,硬件电路设计.SOC单片机程序开发,自己挖的坑太大了,填起来真是费劲啊!整个年假都用来填坑了,也没有时间编写博文,今天忙里偷闲集中整理一下开 ...

  5. 微信小程序+阿里物联平台+合宙Air724UG搭建无服务器物联系统(一)

    今天准备开始用 微信小程序+阿里物联平台+合宙Air724UG搭建一套无服务器版本的物联网系统. 今天写一下主要设计思路, 前端-----与用户完成人机交互功能,准备采用微信小程序开发+阿里IoTSt ...

  6. 15、RDA8910(4GCAT1)CSDK二次开发:通过OneWire驱动库获取DS18B20/DHT11的数据

    目录 点击这里查看所有博文   本系列博客所述资料均来自合宙官方,并不是本人原创(只有博客是自己写的),csdk只是得到了口头的允许公开授权.出于热心,本人将自己的所学笔记整理并推出相对应的使用教程, ...

  7. 4、RDA8910(4GCAT1)CSDK二次开发:期待已久的ADC采集

    目录 点击这里查看所有博文   本系列博客所述资料均来自合宙官方,并不是本人原创(只有博客是自己写的),csdk只是得到了口头的允许公开授权.出于热心,本人将自己的所学笔记整理并推出相对应的使用教程, ...

  8. 1、RDA8910(4GCAT1)CSDK二次开发:环境搭建

    https://blog.csdn.net/weixin_44570083/article/details/106210592 目录 点击这里查看所有博文   本系列博客所述资料均来自合宙官方,并不是 ...

  9. 合宙Luat | 最新网红Cat.1开发板全攻略【使用教程+注意事项+设计图纸】

    合宙Luat | 最新网红Cat.1开发板全攻略[使用教程+注意事项+设计图纸] 使用指南目录参考 特别注意事项 常见问题Q&A 很多朋友认识合宙,都源于合宙的Cat.1系列产品.Air724 ...

最新文章

  1. java 判断object类型_Java学习-方法与多态的学习心得
  2. Java中通过substring和charAt截取字符串并获取指定字符
  3. 手写自己的MyBatis框架-V2.0参数处理
  4. EasyNVR H5无插件摄像机直播解决方案前端解析之:videojs初始化的一些样式处理...
  5. 【报告分享】阿里巴巴全生态就业体系与就业质量研究报告.pdf(附下载链接)...
  6. “火星人”马斯克推论:世界或是被编码而成,上帝可能是个程序员!
  7. 更新:第6章已上线!最酷的程序员应该知道的【LLVM】!
  8. 百度智能云金融安全计算平台有多强?安排!
  9. Hyperledger Fabric Transaction Proposal过程
  10. 铁路订票系统的简单设计(转载)
  11. 库克牛津大学演讲:AR 比 VR更深刻,领导力就是让沉默的人说话
  12. IDEA 配置 maven
  13. 判断人物眼型matlab,怎么判断眼型和脸型?
  14. JIAR安装报错IRA Startup Failed
  15. GitHub的使用(入门)
  16. AG9300:安格TypeC To VGA单芯片中文设计方案
  17. Visi如何使用Weave和Docker
  18. Ext.form.TextField组件的基本用法
  19. Linux世界这一周,有喜有忧(转)
  20. python怎么实现分数形式_python分数怎么表示什么

热门文章

  1. RT-Thread 线程同步及通信 -- 信号量、互斥量、事件、邮箱、消息队列
  2. OPPO K9x和荣耀X30哪个好
  3. Xcode 8 错误 dyld: Library not loaded: @rpath/libswiftCore.dylib 解决办法
  4. 用海天酱油做出的蒜香肉丝拌面口味如此正宗
  5. 安卓模拟器导入通讯录
  6. all File Format
  7. 携手开发者 魅族开放平台筑梦成长
  8. mc服务器皮肤不显示不出来,教你换皮肤!画皮肤教程!服务器再也不是史蒂夫~反正是人by...
  9. TCP的socket详解
  10. Django3中的urls.py文件层级规划include的使用