当前位置: 首页 > article >正文

STM32之串口通信WIFI上云

一、W模块的原理与应用

  • 基本概念

如果打算让硬件设备可以通过云服务器进行通信(数据上报/指令下发),像主流的云服务器有阿里云、腾讯云、华为云,以及其他物联网云平台:巴法云.......,硬件设备需要通过TCP/IP协议栈和云服务器建立连接。

通信的前提是需要建立链接,建立连接的前提是开发板有能力连接云服务器,需要借助WIFI模组实现,比较主流的是ESP系列的WIFI模块(ESP8266-01S)。

  • 模式说明

  • 硬件接线

  • 指令说明

巴法云平台提供了ESP8266的接入文档,大家可以根据巴法云平台的接入文档对WIFI模块进行参数设置。

  1. 测试指令

  1. 设置模式

  1. 连接热点

  1. 使能透传

  1. 建立连接

  1. 进入透传

二、物联网云平台的基本概述

随着物联网技术的快速发展,越来越多的设备需要接入网络以实现智能化功能,物联网平台应运而生。

物联网云平台(IoT Cloud Platform)是物联网生态系统中的核心组件,它通过提供一系列功能和服务,连接物联网设备、处理数据、支持应用开发,并确保整个系统的安全性和可扩展性。

  1. 创建主题

  1. 订阅主题

当硬件设备订阅主题成功后,则属于主题的订阅者,此时如果云服务器向该主题推送消息,则所有订阅了该主题的设备都会收到该消息。

注意:向巴法云发送消息时,必须按照以上的字段进行消息的构造,并且每一条消息都必须以”\r\n”作为结束标志。

  1. 发布消息
  1. 远程控制

可以使用巴法云平台提供的微信小程序(巴法云)推送消息,当然也可以选择把巴法云接入到米家APP,这样可以通过小爱同学进行语音控制。

作业:要求通过巴法云的微信小程序点击灯泡设备(小程序会推送消息给云服务器),要求本地设备订阅灯泡主题,所以本地设备作为订阅者,可以收到来自云服务器的消息,要求根据云服务器下发的指令来对开发板的LED灯进行控制。

提示:巴法云和本地设备的TCP长连接是60s左右,所以应该确保60s内维持心跳,所以可以使用定时器实现心跳的定时发送。

三、设备利用ESP8266获取心知天气

  • 登录账号

  • 添加产品

  • 得到秘钥

  • 使用流程

  • 程序设计

大家可以看到,可以利用HTTP服务向心知天气的服务器来请求天气信息,HTTP协议是支持GET请求。

接口地址:api.seniverse.com/v3/weather/now.json?key=your_api_key&location=beijing&language=zh-Hans&unit=c

作业:自己注册心知天气的账号,利用HTTP协议的GET请求获取广州的天气信息并输出到PC端的上位机软件。

四、JSON格式的构造与解析

  • 基本概念

一般使用HTTP协议或者MQTT协议,服务器或者客户端在网络中传输数据时都采用JSON格式(JavaScript Object Notation,JavaScript对象表示法),JSON不是编程语言,JSON是一种轻量的数据交换方式,常用于网络通信中。

  • 数据格式

JSON的格式中一般是由对象和数组构成,对象中包含键值对的无序序列,并且在JSON格式中对象是用 { } 表示的,键值对是由键和值组成,键的名称必须是字符串 “ ” ,值的类型则是任意的( 整数、浮点数、字符串、NULL、布尔型、对象、数组 ), 并且如果值的类型是对象或者数组,是可以进行嵌套的。在JSON格式中数组是用 [ ] 表示的。 一般JSON格式最外层都是一个对象。 另外,对象中如果有多个键值对,则中间使用英文逗号进行分隔,并且键值对中 键和值 中间使用冒号 : 。一般服务器的响应数据的格式都采用JSON格式,并且是以字符串的形式进行返回。

  • 移植流程

所以可以在MCU中移植cJSON库,cJSON库采用了C语言进行设计,可以对JSON格式的数据进行解析以及可以构造JSON格式,需要从代码托管网站Github、Sourceforge、Gitee下载开源的库源码包。

作业:移植cJSON库到STM32工程中,并对心知天气的JSON数据进行JSON解析,获取广州的温度,并输出到串口调试助手。

拓展作业:要求利用WIFI模块实现接入AI大模型,本地设备把提问内容发给大模型,大模型把响应结果通过串口进行接收。 提示:定义的缓冲区要大一些,可能需要修改启动文件的堆栈大小。

http://www.lryc.cn/news/2383350.html

相关文章:

  • PCB智能报价系统——————仙盟创梦IDE
  • EXO分布式部署deepseek r1
  • 每日算法 -【Swift 算法】寻找两个有序数组的中位数(O(log(m+n)))详细讲解版
  • Linux问题排查-找到偷偷写文件的进程
  • SOPHGO算能科技BM1688内存使用与编解码开发指南
  • kotlin flow的两种SharingStarted策略的区别
  • LeetCode-链表-合并两个有序链表
  • sqli-labs靶场29-31关(http参数污染)
  • 独占内存访问指令LDXR/STXR
  • JVM 垃圾回收机制深度解析(含图解)
  • 如何利用 Conda 安装 Pytorch 教程 ?
  • 【ffmpeg】SPS与PPS的概念
  • uniapp vue 开发微信小程序 分包梳理经验总结
  • 什么是VR展示?VR展示的用途
  • .NET外挂系列:4. harmony 中补丁参数的有趣玩法(上)
  • Go语言中new与make的深度解析
  • 3、ubantu系统 | 通过vscode远程安装并配置anaconda
  • 【Unity】 HTFramework框架(六十五)ScrollList滚动数据列表
  • 深度学习之用CelebA_Spoof数据集搭建一个活体检测-用MNN来推理时候如何利用Conan对软件包进行管理
  • React 常见的陷阱之(如异步访问事件对象)
  • Swagger在java的运用
  • 代码随想录算法训练营 Day49 图论Ⅰ 深度优先与广度优先
  • .NET外挂系列:1. harmony 基本原理和骨架分析
  • HarmonyOS NEXT端云一体化工程目录结构
  • Ajax研究
  • 学习 Android(十)Fragment的生命周期
  • flutter 常用组件详细介绍、屏幕适配方案
  • Elasticsearch生产环境性能调优指南
  • 野火鲁班猫(arrch64架构debian)从零实现用MobileFaceNet算法进行实时人脸识别(一)conda环境搭建
  • RT Thread FinSH(msh)调度逻辑