忙了一个多月,终于完成了一套系统的开发,笔者参与完成了SIM800L向yeelink端上传数据,以及Andriod客户端的开发,视频制作等。装置演示视频地址

为:

http://v.youku.com/v_show/id_XMTI2NTM5OTA2NA==.html

另外我们还做了一套更小的板子,因为外观设计等问题,需要等待。好了,废话不多说,来说一说SIM800L上传数据到yeelink中的一些问题,和解决办法,Andriod

客户端的,技术含量不是很高,就不再提及。

这里我们是通过TCP/IP的方式模拟HTTP进行发送的json格式数据,对发送HTTP要有所了解,不了解的可以windows下,IE 里装个httpwatch,Linux直接用wireshark,跟踪一下

就能大致了解了。

这里就以发送拐杖跌倒标志位来讲述:

const char yeelink1[]="POST /v1.0/device/xxxxx/sensor/xxxxx/datapoint HTTP/1.1\r\n";
const char yeelink2[]="Host: api.yeelink.net\r\n";
const char yeelink3[]="Accept: */*\r\n";
const char yeelink4[]="U-ApiKey:d0fdba9069356c7dc282df3515xxxxxx\r\n";
const char yeelink5[]="Content-Length:13\r\n";
const char yeelink6[]="Content-Type: application/x-www-form-urlencoded\r\n";
const char yeelink7[]="Connection: close\r\n\r\n";
char yeelink8[]="{\"value\":0}\r\n";
const char yeelink9[]="\r\n";
const char yeelink10[]="\x1A\r\n";

这些就是我们要POST的内容(xxx就不公布了)。

要上传这些数据到yeelink,我们首先当然是控制SIM800L上网,GSM联网我们需要:开启任务,激活场景等,依次我们用

AT+CSTT

AT+CIICR

AT+CIFSR

AT+CIPSTART="TCP","42.96.164.52","80"

AT+CIPSEND

然后就可以发送数据了,这些操作倒是没有什么,很正常,在上位机调试也没有什么问题,可放到STM32上面,问题来了

(不是挖掘机技术哪家强的问题),有时候数据发送成功,有时候发送失败,还有时候呢不仅仅没有成功,反而在执行完

指令时,进行AT+CIPSHUT关闭也不成功。首先和大家想到的一样,那就是延迟的问题,没错,确实是延迟的问题,我们

确定一组延迟以后,是可以进行发送的,可信号不好的时候又出现发送不一定成功的时候,而且还会伴随上面的问题,怎样

做呢,刚开始是试着去寻找一组都可以用的延迟,自然是越久越稳定,可激活场景这一步,手册上说最大达到85s,

这个问题考虑了很久,决定放弃这种方法,决定曲线救国吧,这里先说明一点,这里在STM32上调试GSM是有回显的

我们怎样判断每次输入的指令成功执行了呢?

第一,先确定输入指令GSM有应答信号

这里采取的方法是循环等待,直到连接GSM的串口有应答信息,有的需要一次,有的需要两次循环等待,看具体指令。

试验中发现,串口有时连续发送两次,中间有短暂间隔。这里我们借用单片机按键去抖的经验,短暂延时后再次判断

串口中数据长度是否变化来解决。

看到有的人是判断GSM执行指令后,串口缓冲区里面回显的是否正确来判断命令是否成功。这里我不推荐,因为事实上,

比如你的GSM如果已经处于IP GPRSACT状态了,你再执行AT+CIICR返回错误,你却可以进行下一步的操作。

这里推荐的方法是执行命令前,先查询IP所处的状态,使用命令为:AT+CIPSTATUS,这样可以在任意状态下进行。

这里贴出部分代码,这里没有使用结构体偏移,源于对STM32编译器不了解,程序粗糙了点

void open_ip(void)
{
    u8 flag=1;
    
    while(flag)
    {
        if(getipstatus("TCP CONNECTING")||getipstatus("IP CONFIG"))
        {
            delay_ms(1000);            
        }else
        if(getipstatus("CONNECT OK"))
        {
                flag=0;            
        }else
        if(getipstatus("TCP CLOSED"))
        {
            usart3_send_str(atcipshut);
            wait_for_answer();    
            wait_for_answer();
        }else
        if(getipstatus("IP STATUS"))
        {
            usart3_send_str(atcipstart);
            wait_for_answer();                    
        }else
        if(getipstatus("IP GPRSACT"))
        {
            usart3_send_str(atcifsr);
            wait_for_answer();                    
        }else
        if(getipstatus("IP START"))
        {
            usart3_send_str(atciicr);
            wait_for_answer();
            wait_for_answer();            
        }else
        if(getipstatus("IP INITIAL"))
        {
            usart3_send_str(atcstt);
            wait_for_answer();
        }
        else{
            usart3_send_str(atcipshut);
            wait_for_answer();
    }
    }
}

笔者实验发现,都很成功

STM32通过SIM800L向yeelink端上传数据相关推荐

  1. 向服务端上传数据如何确保数据完整性、安全性

    1.MD5:检验数据的完整性 2.AES:对称加密,有ECB/CBC等模式,有三种填充方式 3.RSA:非对称加密,公钥加密,私钥解密,私钥签名. 总结,通常以上三种方式一起使用以达到加密传输数据的效 ...

  2. 百度LBS服务我们自己上传数据,我们客户端获取数据然后进行小黄车和膜拜单车定位描点等骚操作

    一,演示和需求的SDK和ak等配置最近我们一个项目需要自己android端上传数据到百度LBS服务,然后获取数据并显示.搞了2天完成了.其实很简单的哦!我们一步步来,今天的活我一小时搞定,一天写博客, ...

  3. java上传音频到服务器_Java 客户端向服务端上传mp3文件数据的实例代码

    客户端: package cn.itcast.uploadpicture.demo; import java.io.BufferedInputStream; import java.io.FileIn ...

  4. 移动端扫码上传数据信息

    随着移动端设备的普及,越来越多的工作环节我们可以借助移动设备进行.移动端扫码(支持二维码.条形码)上传数据信息可以很大程度上减少数据录入纰漏,便捷地联动相关数据,提高信息准确率. 在百数的多个解决方案 ...

  5. vue 移动端头像裁剪_移动端 上传头像 并裁剪功能(h5)

    移动端头像图片上传裁剪 .button { outline: 0; display: inline-block; margin-bottom: 0; font-weight: 400; text-al ...

  6. TCP:利用Socket编程技术实现客户端向服务端上传一个图片。

    问题: 利用Socket编程技术实现客户端向服务端上传一个图片的程序. 客户端: import java.io.*; import java.net.Socket;public class clien ...

  7. 移动端上(传图片太大)处理方案

    利用FileReader和FormData实现图片预览和上传(base64转二进制文件) 监听表单文件变化 文件表单的样式主要通过让它后面,通过别的DOM来美化它. <input type=&q ...

  8. vue2移动端上传,预览,压缩图片,解决拍照旋转问题

    https://github.com/exif-js/exif-js http://code.ciaoca.com/javascript/exif-js/demo/ 因为最近遇到个移动端上传头像的需求 ...

  9. STM32 Proteus仿真PT100温度测量串口上传LCD1602显示-0002

    Proteus仿真小实验: STM32 Proteus仿真PT100温度测量串口上传LCD1602显示-0002 功能: 硬件组成:STM32F103R6单片机 +LCD1602显示器+PT100温度 ...

  10. stm32f103c8t6+ESP8266利用onenet平台上传数据到云平台,再利用云平台远程下发命令给单片机控制LED灯亮灭

    stm32f103c8t6+ESP8266利用onenet平台上传数据到云平台,再利用云平台远程下发命令给单片机控制LED灯亮灭 接触stm32已经有一年半的时间了,从最开始的stm32F103ZET ...

最新文章

  1. 55道常见的计算机面试题
  2. java的datatype_java数据类型
  3. 辞退了一名 2 年工作经验的前端工程师
  4. 如何通过SpringMVC框架响应JSON数据
  5. 30个Oracle语句优化规则详解
  6. 稳定排序与不稳定排序的定义
  7. 2021年5月信息系统项目管理师案例分析真题+视频讲解(3)
  8. SpringBoot启动项目时提示:Error:(3, 32) java: 程序包org.springframework.boot不存在
  9. 【tensorflow-keras-BatchNormalization】BatchNormalization批量标准化层
  10. Python从数据库读取大量数据批量写入文件的方法
  11. 如何通过命令终端访问本地/局域网/远程的MySQL数据库_访问数据库_连接数据库_登录数据库
  12. android DatePicker
  13. 设置 cell点击 背景色
  14. 简单的SQL语句 DDL
  15. 浏览器默认事件,事件监听,事件委托
  16. JS 实现海康威视摄像头笔记
  17. 机械制图之平面图形的尺寸分析
  18. 百度地图(地图生成)
  19. Xcode 6 删除 DerivedData后,编译异常
  20. PSO算法求解全局最大值

热门文章

  1. Visual Studio 2015 安装教程(附安装包)
  2. 大数据下的图片类别以及图片爬取详细的过程(一)
  3. DJ Mix Pads 2 - Remix Version for Mac(独特DJ混音创作软件)
  4. Resnet18详细结构
  5. 实验六 教务管理数据库的设计
  6. 无限增益多路反馈有源滤波器
  7. as(四级考试频度很大的几个用法)
  8. 零基础学SQL(三、MYSQL环境变量配置及启动)
  9. javascript手册安卓版_JavaScript 手册
  10. 使用命令启动IOS模拟器