杰理芯片AC79——物联网远程点亮/关闭LED灯

news2024/12/26 23:53:11

杰理芯片的封装简直太香了(比STM32香多了),SDK也封装得很好,对于我这种手残党简直不要太友好。赶紧学起来,快速实现你想要的功能吧!

芯片选型

杰理AC79

资料文档

环境搭建以及点亮第一盏灯请访问:

官方文档:欢迎使用杰理 JieLi_AC79 开源项目文档 — JL Project Documentation (zh-jieli.com)

版本描述:本文SDK使用realse_1.2.0版本

需求描述

 现在有很多智能家居可以实现远程操作,本文实现需求:将LED灯的状态同步到阿里云物联网平台,再从平台上下发远程指令开灯和关灯。

实现原理

  1. 芯片连上WIFI,实现联网功能;
  2. 进入阿里云物联网平台,创建产品和设备,获得设备号和密码;
  3. 芯片通过MQTT协议将灯的状态同步到物联网平台;
  4. 在物联网平台设置灯的状态为开启或关闭(动手能力强的伙伴可以写个APP通过安卓MQTT或IOS来给实现芯片发指令哟~)

MQTT协议

MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,设计用于在低带宽和不稳定网络环境下进行高效的通信。以下是MQTT协议的主要特点:

发布/订阅模式:MQTT采用发布/订阅模式,其中客户端可以订阅一个或多个主题(Topic),而服务器则负责将消息发布到这些主题。这种模式使得多个客户端可以同时接收到感兴趣的消息。

轻量级:MQTT协议非常轻量级,协议头部信息很小,有效减少了网络传输的开销和数据流量。这使得MQTT非常适合在低带宽和有限资源的设备上使用,例如物联网设备。

QoS级别:MQTT支持三个不同的消息传输质量(QoS)级别:0、1和2。QoS级别决定了消息传输的可靠性和保证程度。较高的QoS级别会增加通信开销,但可以提供更可靠的消息传输。

可靠性和持久性:MQTT协议具有可靠性和持久性机制。客户端可以选择是否要求服务器保留未传递的消息,以便在客户端重新连接时重新发送。这确保了即使在网络中断或重新连接时,消息也不会丢失。

安全性:MQTT协议支持使用TLS/SSL进行加密和身份验证,以确保通信的安全性。这对于保护敏感数据和防止未经授权的访问非常重要。

总结而言,MQTT协议是一种灵活、可靠且适用于物联网应用的通信协议。它具有低开销、轻量级和可扩展等特点,使得它成为物联网设备之间进行高效通信的理想选择。

阿里云物联网平台配置

基本配置

其他物联网平台也可以,因为阿里云可以免费试用的,里面的公共实例也可以用,对个人开发者友好。绝对不是广告。

https://iot.console.aliyun.com/lk/summary/new 阿里云物联网平台:点此访问

阿里云参考的开发文档:如何调用Python的Paho MQTT类库将设备接入物联网平台_物联网平台(IoT)-阿里云帮助中心 (aliyun.com)

主要步骤:

  1. 创建产品、创建设备
  2. 获取设备证书
  3. 阅读SDK文档,下载Python版本DEMO(先用python调通SDK的订阅和发布,后续在杰理芯片调试时不易出错,千万别省,否则等会儿会各种错误)
  4. 修改Python DEMO中的示例代码,将自己的产品和设备填上去,调通订阅和发布(订阅和发布地址见下图)

 Python Demo 调试

***运行pythonDEMO前必须要装依赖库,否则会报错***

pip install paho-mqtt==1.6.1

Python DEMO 要修改的地方:

发送的JSON数据组织格式是参照从阿里云调试发过来的JSON数据来的:

data = {"method":"thing.service.property.post","id":"117116779",
                "params":{"PowerSwitch":1,"SprayLevel":27,"TargetHumidity":88},"version":"1.0.0"}

运行这个python文件,在设备中你就可以看到你设置的数据被更新到物联网平台了。

 从阿里云下发数据到设备

  1.  首先要运行上面的Python DEMO,不然你的设备不会在线,要设备在线才能发
  2. 点击【监控运维】-【在线调试】,选择你的设备和产品
  3. 点击【属性调试】,输入你要发的属性值
  4. 点击【设置】,然后你就可以看到运行Python DEMO控制台中有日志信息打印出来,就代表订阅调通了

订阅成功的日志如下:

publish msg: {"method": "thing.service.property.post", "id": "117116779", "params": {"PowerSwitch": 1, "SprayLevel": 27, "TargetHumidity": 88}, "version": "1.0.0"}
receive message ---------- topic is : /sys/k10phTLeV8n/Oy9fCp6wuH2zLcC9LJBB/thing/service/property/set
receive message ---------- payload is : {"method":"thing.service.property.set","id":"1991251952","params":{"PowerSwitch":0},"version":"1.0.0"}
reveice property_set command, need to post ---------- topic is: /sys/k10phTLeV8n/Oy9fCp6wuH2zLcC9LJBB/thing/event/property/post
reveice property_set command, need to post ---------- payload is: {"params":{"PowerSwitch": 0}}

杰理芯片配置

请阅读杰理AC79的文档,根据文档来做会快很多。需要阅读【模块例程】中【3. WIFI部分】和【8.网络协议】中关于MQTT CLIENT 部分。

文档连接:欢迎使用杰理 JieLi_AC79 开源项目文档 — JL Project Documentation (zh-jieli.com)

DEMO示例工程:fw-AC79_AIoT_SDK: Firmware for Generic WiFi & Bluetooth Combo SDK(AC79 series) (gitee.com)

芯片联网

杰理芯片是自带WIFI的,所以我们可以打开手机,开启热点,让杰理芯片来连接我们的热点网络。

需要修改的东西并不多:

  1. 在apps\demo\demo_DevKitBoard\include\app_config.h中开启WIFI网络功能,取消USE_DEMO_WIFI_TEST注释;
  2. 在apps\demo\demo_DevKitBoard\wifi_demo_task.c中修改下面几项:
#define STA_MODE_TEST   // 配置 STA模式

#define STA_SSID  "Sophia"           //配置 STA模式的SSID
#define STA_PWD  "Asdfghjkl"      //配置 STA模式的密码
#define CONNECT_BEST_SSID  1    //配置如果啟動WIFI后在STA模式下, 是否挑选连接记忆过的信号最优WIFI

运行DEMO示例发数据给阿里云

基于MQTT协议传输数据到阿里云,我们只需要修改修改Demo就能运行。

  1. 在apps\demo\demo_DevKitBoard\include\demo_config.h,取消USE_MQTT_TEST注释;
  2. 在apps\common\example\network_protocols\mqtt\main.c,修改mqtt_start函数中的配置;
static int mqtt_start(void)
{
    Client client;
    Network network;
    MQTTPacket_connectData connectData = MQTTPacket_connectData_initializer;
    MQTTMessage message;
    int err;
    int loop_cnt = 0;
    int temperature = 0;
    int humidity = 0;

    char sendbuf[256];
    char payload[256] = "{\"method\":\"thing.event.property.post\",\"id\":\"117116782\",\"params\":{\"PowerSwitch\":1,\"SprayLevel\":30,\"TargetHumidity\":30},\"version\":\"1.0.0\"}";
    //char payload[256] = "{\"id\":\"161848123\",\"version\":\"1.0\",\"params\":{\"PowerSwitch\":0,\"TargetHumidity\":30},\"method\":\"thing.event.property.post\"}";
    char *address = "iot-060abi48.mqtt.iothub.aliyuncs.com";
    char *username = "Oy9fCp6wuH2zLcC9LJBB&k10phTLeV8n";
    char *password = "b68c08d7be37a9f2e4635356e4d3ae541ecbf7048998aa0c29be7f5f65c23889";
    char *subscribeTopic = "/sys/k10phTLeV8n/Oy9fCp6wuH2zLcC9LJBB/thing/service/property/set";                      //订阅的主题
    char *publishTopic = "/sys/k10phTLeV8n/Oy9fCp6wuH2zLcC9LJBB/thing/event/property/post";   //发布消息的主题
    char *clientID = "k10phTLeV8n.Oy9fCp6wuH2zLcC9LJBB|securemode=2,signmethod=hmacsha256,timestamp=1711773288822|";

注意:MQTT配置可以在阿里云下图所示位置获得。

从阿里云接收数据点灯

接收MQTT的消息在函数static void messageArrived(MessageData *data)中,添加解析与点灯逻辑即可,示例代码如下:

    // 点灯
    cJSON * monitor_json = cJSON_Parse(temp);
    cJSON * params = cJSON_GetObjectItem(monitor_json,"params");
    cJSON * light_status = cJSON_GetObjectItem(params,"PowerSwitch");
    if(light_status->valueint){
        gpio_direction_output(IO_PORTC_00,1);
    }else{
        gpio_direction_output(IO_PORTC_00,0);
    }

注意:点灯和解析JSON需要在main.c文件中引用头文件;

#include "gpio.h"
#include "cJSON.h"

常见问题

  1. 设备同时只能一个客户端去连接在线,如果Python DEMO一直在运行,杰理芯片连不上的;
  2. 杰理芯片无法订阅和发布的可能原因有:MQTT示例中设备名称、账号密码、订阅地址、发布地址、发送的数据格式、以及USE_MQTT_TEST未在头文件中启用;
  3. 无法发布数据到阿里云时不要方,通过串口检查日志,搜索关键字“MQTT”相关的日志,看看MQTT有没有被启动,如果有“kill for mqtt”类似的,说明MQTT配置出错了,被芯片杀掉了,请按照第二条仔细检查MQTT的配置;
  4. 杰理芯片一定要先联网,进入STA模式,不联网是不能通过MQTT协议访问阿里云物联网平台的;
  5. 如果消息能发布到阿里云,但不能订阅成功。请先检查订阅地址是否正确,然后用阿里云的在线调试功能看串口是否能接收到数据,再排查是否是接收函数有问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1564726.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

http: server gave HTTP response to HTTPS client 分析一下这个问题如何解决中文告诉我详细的解决方案

这个错误信息表明 Docker 客户端在尝试通过 HTTPS 协议连接到 Docker 仓库时,但是服务器却返回了一个 HTTP 响应。这通常意味着 Docker 仓库没有正确配置为使用 HTTPS,或者客户端没有正确配置以信任仓库的 SSL 证书。以下是几种可能的解决方案&#xff1…

VSCode好用插件

由于现在还是使用vue2,所以本文只记录vue2开发中好用的插件。 美化类插件不介绍了,那些貌似对生产力起不到什么大的帮助,纯粹的“唯心主义”罢了,但是如果你有兴趣的话可以查看上一篇博客:VSCode美化 1. vuter 简介&…

Apache Paimon实时数据糊介绍

Apache Paimon 是一种湖格式,可以使用 Flink 和 Spark 构建实时 数据糊 架构,用于流式和批处理操作。Paimon 创新地将湖格式和 LSM(日志结构合并树)结构相结合,将实时流式更新引入湖架构中。 Paimon 提供以下核心功能: 实时更新: 主键表支持大规模更新的写入,具有非常…

day02-SpringCloud02(Nacos、Feign、Gateway)

1.Nacos 配置管理 Nacos 除了可以做注册中心,同样可以做配置管理来使用。 1.1.统一配置管理 当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案&#x…

REST API的指纹验证机制

前端或者客户端涉及数据相关的请求都是不安全的,从某种意义上只能通过一些手段降低请求不被容易使用。本来来介绍一种基于 JWT 的指纹机制。 关于 JWT 令牌机制就不详细介绍了。在 JWT 令牌中包含系统 JWT 指纹可以带来安全改进,而不会给用户带来任何不…

GitOps - 为 OpenShift GitOps 配置邮件通知

《OpenShift 4.x HOL教程汇总》 说明:本文已经 在OpenShift 4.15 OpenShift GitOps 1.11.2 环境中验证 文章目录 ArgoCD 的 Notification 功能简介启动 OpenShift GitOps 的 Notification 功能配置邮件通知验证参考 说明:先根据《OpenShift 4 之 GitOp…

基于深度学习的危险物品检测系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)

摘要:本文详细介绍基于YOLOv8/v7/v6/v5的危险物品检测技术。主要采用YOLOv8技术并整合了YOLOv7、YOLOv6、YOLOv5的算法,进行了细致的性能指标对比分析。博客详细介绍了国内外在危险物品检测方面的研究现状、数据集处理方法、算法原理、模型构建与训练代码…

人工智能|深度学习——基于Xception算法模型实现一个图像分类识别系统

一、Xception简介 在计算机视觉领域,图像识别是一个非常重要的任务,其应用涵盖了人脸识别、物体检测、场景理解等众多领域。随着深度学习技术的发展,深度卷积神经网络(Convolutional Neural Networks,简称CNN&#xff…

激发创新活力:算力券与模型券,科技企业的新动力

激发创新活力:算力券与模型券,科技企业的新动力 在数字化转型的大潮中,科技创新已成为推动企业发展的核心动力。为了进一步激发企业的创新活力,政府和相关机构开始探索一种新的激励机制——发放“算力券”和“模型券”。这些创新…

面向对象编程(二)

面向对象(二) 类和对象的概念 类是一种抽象的数据类型,它是对某一类事物整体描述/定义,但是不能代表某一个具体的事物(动物,植物,手机…)对象是抽象概念的具体实例(比如…

Prometheus+grafana环境搭建redis(docker+二进制两种方式安装)(四)

由于所有组件写一篇幅过长,所以每个组件分一篇方便查看,前三篇 Prometheusgrafana环境搭建方法及流程两种方式(docker和源码包)(一)-CSDN博客 Prometheusgrafana环境搭建rabbitmq(docker二进制两种方式安装)(二)-CSDN博客 Prometheusgrafana环境搭建m…

Java基础知识总结(第八篇):集合:Collection(List、Set)、Map、Collections 工具类

声明: 1. 本文根据韩顺平老师教学视频自行整理,以便记忆 2. 若有错误不当之处, 请指出 系列文章目录 Java基础知识总结(第一篇):基础语法 Java基础知识总结(第二篇)&#x…

Matlab|计及需求侧响应日前—日内两阶段鲁棒备用优化

目录 1 主要内容 日前计划模型 日内调整模型 不确定集建模 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序复现文章《计及需求侧响应日前—日内两阶段鲁棒备用优化》,以6节点系统为例,综合考虑风电出力不确定性与电力设备 N-k强迫停运&…

在linux下conda 创建虚拟环境失败的解决方法

报错内容一&#xff1a; Solving environment: failed CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://conda.anaconda.org/conda-forge/noarch/repodata.json> Elapsed: - An HTTP error occurred when trying to retrieve this URL. HTTP errors are…

【c++】类和对象(七)

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;c笔记仓 朋友们大家好&#xff0c;本篇文章来到类和对象的最后一部分 目录 1.static成员1.1特性 2.友元2.1引入&#xff1a;<<和>>的重载2.2友元函数2.3友元类 3.内部类4.匿名对象5.拷…

servlet个人博客系统的web自动化测试(六)

1. 测试前的准备工作 获取博客系统Chrome&webDriver测试环境搭建流程 : 熟悉项目针对核心流程设计测试用例&#xff08;手工测试用例&#xff09;将手工测试用例转换成自动化测试用例部署 手工测试用例 : 自动化测试用例 代码结构设计 &#xff1a; 初始化动作&#xff1a…

最新AI工具系统ChatGPT网站运营源码SparkAi系统V6.0版本,GPTs应用、AI绘画、AI换脸、垫图混图、Suno-v3-AI音乐生成大模型全支持

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持GPT…

银行监管报送系统介绍(十五):金融审计平台

《“十四五”国家审计工作发展规划》中重点强调&#xff0c;金融审计&#xff1a;以防范化解重大风险、促进金融服务实体经济&#xff0c;推动深化金融供给侧结构性改革、建立安全高效的现代金融体系为目标&#xff0c;加强对金融监管部门、金融机构和金融市场运行的审计。 —…

Spring API 接口和自定义类来实现AOP(Spring学习笔记十)

1、什么是AOP 全称是 Aspect Oriented Programming 即&#xff1a;面向切面编程。是OOP&#xff08;面向对象编程&#xff09;的延续&#xff0c;也是Spring框架中的一个重要内容&#xff0c;是函数式编程的一种衍生泛型。简单的说他就是把我们程序重复的代码抽取出来&#xf…

MySQL-执行计划、explain关键字查询执行计划以及explain案例分析

一、执行计划 MySQL 的执行计划&#xff08;Execution Plan&#xff09;是数据库查询优化器生成的一种指导性信息&#xff0c;它描述了 MySQL 执行查询时所采用的具体执行策略。执行计划通常由 MySQL 的查询优化器根据查询语句、表结构、索引等信息进行生成&#xff0c;并且用…