搜索
bottom↓
回复: 28

请教:大伙用sim900或者esp8266等等,是怎样写的程序

[复制链接]

出0入55汤圆

发表于 2019-4-11 15:07:54 | 显示全部楼层 |阅读模式
用AT指令,在发送了指令后要等待串口回复(比如:OK , GOT TO IP,等等),主要是这个等待的时候从几百到几十秒不等(网络回复时间慢),在等待的时候不可能就在那里等吧,搞了几种方式,感觉都不得要领,请问大伙是怎样搞的?
最好的是用小型的操作系统,因为用delay时会释放CPU给其它任务用。
用状态机的话,看着一堆case,头皮发麻。
啥都不用,直接等,只能在初始化的时候用,大循环用不了了。。
头疼。。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2019-4-11 15:21:30 | 显示全部楼层
本帖最后由 lcw_swust 于 2019-4-11 15:22 编辑

看这个“小小调度器”似乎挺有意思,把switch case 玩得出神入化,我还没理解透。
https://www.amobbs.com/thread-5702323-1-1.html

似乎还有利用函数指针实现的调度器。
https://www.amobbs.com/thread-5640282-1-1.html

出0入0汤圆

发表于 2019-4-11 15:22:23 | 显示全部楼层
使用类似菜单方式实现,函数指针,加个定时器

出0入0汤圆

发表于 2019-4-11 15:23:06 | 显示全部楼层
请参考 正点原子的 SIM900A 通信例程,写的比较好  

出0入0汤圆

发表于 2019-4-11 15:45:17 | 显示全部楼层
ESP8266有RTOS版本和NONOS版本,RTOS版本使用freertos,可以用任务调度,NONOS使用回调和定时器,所以都不用等待,前日是,没有用AT的版本。

出0入228汤圆

发表于 2019-4-11 16:40:04 | 显示全部楼层
楼主问的就是使用at 指令的.

AT 等待的处理确实是麻烦的要死,所以一定要用个类似OS或OS来处理程序 ,不然MCU都等死了.
我是喜欢用:ProtoThreads
也可以freertos之类的.

实际上现在很多通讯模块都支持 内置开发不需要另外的at指令.
比如合宙air202 内置lua开发
esp8266可以直接用它的SDK写固件,也可以用lua
就不需要跟at指令打交道了.

出0入55汤圆

 楼主| 发表于 2019-4-12 09:11:29 | 显示全部楼层
磊磊映画 发表于 2019-4-11 15:23
请参考 正点原子的 SIM900A 通信例程,写的比较好

看了。正点原子的也是等待回复了。死等+超时。如果用操作系统,这样写就OK的了。但我没用操作系统,自己按这个思路写了个状态机的。
现在问题是:
要发udp数据时,首先要发个命令的,然后等待">",然后发数据,再等待"SEND OK"。这问题来了
如果这时候服务器发了一条指令下来,那就被上面的过程给丢了。。。

出0入0汤圆

发表于 2019-4-12 09:18:33 | 显示全部楼层
不是有STM32的串口空闲中断吗。

出0入0汤圆

发表于 2019-4-12 09:20:42 | 显示全部楼层
jssd 发表于 2019-4-12 09:11
看了。正点原子的也是等待回复了。死等+超时。如果用操作系统,这样写就OK的了。但我没用操作系统,自己 ...

我记得服务器下发下来的指令是先缓存到通信模块里的, 每次需要主动去询问有没有消息下来。

出0入55汤圆

 楼主| 发表于 2019-4-12 09:56:42 | 显示全部楼层
wxws 发表于 2019-4-11 16:40
楼主问的就是使用at 指令的.

AT 等待的处理确实是麻烦的要死,所以一定要用个类似OS或OS来处理程序 ,不然MC ...

现在用的是STM32F103跟ESP8266还有2G,4G模块通讯。ESP8266还可以搞一下,2G,4G就没法了,还是AT指令
之前用过freeos,但不是太熟,感觉不太好。所以还是用状态机

出0入0汤圆

发表于 2019-4-12 09:57:33 | 显示全部楼层
可以试下 at device 框架,对通用指令这块解析处理得比较好。

出0入55汤圆

 楼主| 发表于 2019-4-12 09:59:24 | 显示全部楼层
lcw_swust 发表于 2019-4-11 15:21
看这个“小小调度器”似乎挺有意思,把switch case 玩得出神入化,我还没理解透。
https://www.amobbs.com/ ...

小小调度器弄过了下,有个问题不知道怎样解决,看下面的帖子57楼。
小小调度器1.1重新整理版,8位16位32位可以选择定义
https://www.amobbs.com/thread-5702323-1-1.html
(出处: amoBBS 阿莫电子论坛)

出0入55汤圆

 楼主| 发表于 2019-4-12 10:00:43 | 显示全部楼层
磊磊映画 发表于 2019-4-12 09:20
我记得服务器下发下来的指令是先缓存到通信模块里的, 每次需要主动去询问有没有消息下来。 ...

不是,我测试过。连接上服务器后,只要服务器发指令下来都收得到

出0入0汤圆

发表于 2019-4-12 10:01:55 | 显示全部楼层
哈哈 最近也在思考有没有类似的框架,逻辑或操作系统的

出0入12汤圆

发表于 2019-4-12 10:04:47 | 显示全部楼层
freertos,stm串口使用DMA接收,空闲中断后数据扔进队列,后台任务处理数据。

出0入0汤圆

发表于 2019-4-12 10:10:14 | 显示全部楼层
jssd 发表于 2019-4-12 09:56
现在用的是STM32F103跟ESP8266还有2G,4G模块通讯。ESP8266还可以搞一下,2G,4G就没法了,还是AT指令
之 ...

楼主,搞不定的话就直接买透传模块就行啊,这些东西都可以忽略。

出0入0汤圆

发表于 2019-4-12 10:12:02 | 显示全部楼层
jackjiao 发表于 2019-4-12 10:01
哈哈 最近也在思考有没有类似的框架,逻辑或操作系统的

肯定有啊, AT指令主要是面向 PC 或者手机的,以前X86 和现在的安卓手机底层对这些通信模块的处理都是通过AT指令完成的,而且处理的非常稳定。  可以参考参考

出0入0汤圆

发表于 2019-4-12 10:13:13 | 显示全部楼层
jssd 发表于 2019-4-12 10:00
不是,我测试过。连接上服务器后,只要服务器发指令下来都收得到

在协议层加上点处理,没有收到的数据就不会应答,让服务器重发  

出0入224汤圆

发表于 2019-4-12 10:38:21 | 显示全部楼层
jssd 发表于 2019-4-12 09:11
看了。正点原子的也是等待回复了。死等+超时。如果用操作系统,这样写就OK的了。但我没用操作系统,自己 ...

这是接收部分程序没处理好吧,下发数据会用个表识,IPD。。之类的,要每个接收到的命令(数据)都能解析出来。

出0入0汤圆

发表于 2019-4-12 11:22:01 | 显示全部楼层
裸机的话可以状态机加一个超时等待的状态。OS的话就延时就好

出0入0汤圆

发表于 2019-4-12 14:49:05 来自手机 | 显示全部楼层
aozima 发表于 2019-4-12 09:57
可以试下 at device 框架,对通用指令这块解析处理得比较好。

哪个里面的at device框架,没搜到的,能具体一点描述下么,谢谢

出0入0汤圆

发表于 2019-4-12 15:06:10 | 显示全部楼层
本帖最后由 aozima 于 2019-4-12 15:08 编辑
stanley.zhao 发表于 2019-4-12 14:49
哪个里面的at device框架,没搜到的,能具体一点描述下么,谢谢


一套解析AT的代码包
https://github.com/RT-Thread-packages/at_device#readme

http://packages.rt-thread.org/itemDetail.html?package=at_device

还有很多其它的包
http://packages.rt-thread.org/index.html

出870入263汤圆

发表于 2019-4-12 15:19:38 | 显示全部楼层
这个问题我有很好的解决方案。我的需求很复杂:一个MQTT长连接,外加随时发起的http连接;要求这两个基于TCP的连接互不干扰,随时可用;另外还要随时可以配置ESP8266模块的工作参数。

出0入0汤圆

发表于 2019-4-12 15:49:11 | 显示全部楼层
使用两个处理任务,一个任务专门用于处理接收,一个任务专门用于处理发送。

出0入55汤圆

 楼主| 发表于 2019-4-12 17:06:01 | 显示全部楼层
磊磊映画 发表于 2019-4-12 10:10
楼主,搞不定的话就直接买透传模块就行啊,这些东西都可以忽略。

自己写了一个。已经差不多了。搞好了我再发上来给大伙评评,抛砖引玉,看看有没有更好的方法。

出0入0汤圆

发表于 2019-4-12 19:28:54 | 显示全部楼层
jssd 发表于 2019-4-12 17:06
自己写了一个。已经差不多了。搞好了我再发上来给大伙评评,抛砖引玉,看看有没有更好的方法。 ...

厉害厉害

出0入0汤圆

发表于 2019-4-12 19:36:29 | 显示全部楼层
qp状态机也可以的

出0入0汤圆

发表于 2019-4-12 20:41:16 来自手机 | 显示全部楼层
aozima 发表于 2019-4-12 15:06
一套解析AT的代码包
https://github.com/RT-Thread-packages/at_device#readme


这个是跑系统的呢
想找裸机下好用的:)
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-18 22:48

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表