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

杰理芯片的封装简直太香了(比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. 如果消息能发布到阿里云,但不能订阅成功。请先检查订阅地址是否正确,然后用阿里云的在线调试功能看串口是否能接收到数据,再排查是否是接收函数有问题。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大话设计模式之抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种方式来创建一系列相关或依赖对象的家族,而无需指定其具体类。该模式通过提供一个抽象工厂接口,定义了一组可以创建不同类型对象的方法&#…

【JavaEE】_Spring MVC项目上传文件

目录 1. 文件上传具体实现 2. 保存文件 1. 文件上传具体实现 .java文件内容如下: package com.example.demo.controller;import com.example.demo.Person; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.Multip…

2013年认证杯SPSSPRO杯数学建模A题(第二阶段)护岸框架全过程文档及程序

2013年认证杯SPSSPRO杯数学建模 A题 护岸框架 原题再现: 在江河中,堤岸、江心洲的迎水区域被水流长期冲刷侵蚀。在河道整治工程中,需要在受侵蚀严重的部位设置一些人工设施,以减弱水流的冲刷,促进该处泥沙的淤积&…

SpringData ElasticSearch - 简化开发,完美适配 Spring 生态

目录 一、SpringData ElasticSearch 1.1、环境配置 1.2、创建实体类 1.3、ElasticsearchRestTemplate 的使用 1.3.1、创建索引 设置映射 1.3.2、简单的增删改查 1.3.3、搜索 1.4、ElasticsearchRepository 1.4.1、使用方式 1.4.2、简单的增删改查 1.4.3、分页排序查…

【路径规划论文整理(1)】Path Deformation Roadmaps(附带对PRM改进算法、同伦映射的整理)

本系列主要是对精读的一些关于路径搜索论文的整理,包括了论文所拓展的其他一些算法的改进思路。 这是本系列的第一篇文章: Jaillet, Lonard & Simon, Thierry. (2008). Path Deformation Roadmaps: Compact Graphs with Useful Cycles for Motion Pl…

Windows下编译TinyXML(XML文件解析)

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 TinyXML是什么? TinyXML是一个轻量级的C XML解析器,它提供了一种简单的方法来解析和操作XML文档。TinyXM…

【XR806开发板试用】简单点灯-- 基于SPI控制W2812矩阵幻彩动图和字幕显示系统

1.效果展示 1.gif 动图展示 2.字幕展示 2.软件开发流程 2.1 全志XR806 基本开发流程 使用指南 自己踩过的坑 必须app开头 鸿蒙hb 依赖python 环境。建议使用conda虚拟环境 下载开启硬件校验和烧录重启 2.2 W2812 简单介绍 不是科普文,自行百度 /*WS2812B T…

Mac下Docker Desktop starting的解决方法

记录下自己在新增了一个新的容器后,Disk Size过大导致启动Docker Desktop会一直卡在Docker Desktop starting,并且重启无效的解决方法。该方法无需重新卸载,并且能保留原有的镜像和容器。 一、确认问题 首先确认Docker.raw大小以确认是否和笔…

vivado 高级编程功能1

适用于 7 系列、 UltraScale 和 UltraScale FPGA 和 MPSoC 的回读和验证 为 7 系列器件生成已加密文件和已经过身份验证的文件 注释 : 如需获取其它信息 , 请参阅《使用加密确保 7 系列 FPGA 比特流的安全》 ( XAPP1239 ) 。 要生成加密比特流…

【蓝桥杯嵌入式】13届程序题刷题记录及反思

一、题目分析 考察内容: led按键(短按)PWM输出(PA1)串口接收lcd显示 根据PWM输出占空比调节,高频与低频切换 串口接收(指令解析)【中断接收】 2个显示界面 led灯闪烁定时器 二…

Python读取Excel根据每行信息生成一个PDF——并自定义添加文本,可用于制作准考证

文章目录 有点小bug的:最终代码(无换行):有换行最终代码无bug根据Excel自动生成PDF,目录结构如上 有点小bug的: # coding=utf-8 import pandas as pd from reportlab.pdfgen import canvas from reportlab.lib.pagesizes import letter from reportlab.pdfbase import pdf…

go的orm框架-Gorm

官网文档 特点 全功能 ORM 关联 (拥有一个,拥有多个,属于,多对多,多态,单表继承) Create,Save,Update,Delete,Find 中钩子方法 支持 Preload、Joins 的预加载 事务&…

linux通过进程pid查询容器docker

我遇到的问题是在docker中启动了进行,占用显卡,如下nvidis-smi查看: 现在要查询pid16325属于哪个容器ID,指令: ps -e -o pid,cmd,comm,cgroup | grep 16325查到如下结果,其中12:cpuset:/docker/ 后面的 8…

Qt_Note20_QML_自定义Grid控件与OpacityMask的使用

import QtQuick 2.12 import QtQuick.Window 2.12 import QtQuick.Controls 2.12 import QtGraphicalEffects 1.14Window {visible: truewidth: 640height: 480title: qsTr("Hello World")// 自定义Grid控件与OpacityMask的使用Grid {id: gridwidth: 15height: 200co…

燃气管网安全运行监测系统功能介绍

燃气管网,作为城市基础设施的重要组成部分,其安全运行直接关系到居民的生命财产安全和城市的稳定发展。然而,随着城市规模的不断扩大和燃气使用量的增加,燃气管网的安全运行面临着越来越大的挑战。为了应对这些挑战,燃…

车载以太网AVB交换机 gPTP透明时钟 6口 DB9接口 千兆车载以太网交换机

SW1100千兆车载以太网交换机 一、设备简要分析 8端口千兆和百兆混合车载以太网交换机,其中包含2个通道的1000BASE-T1接口,5通道100BASE-T1接口和1个通道1000BASE-T标准以太网(RJ45接口),可以实现车载以太网多通道交换,千兆和百兆…

加速科技高性能数模混合信号测试设备ST2500EX精彩亮相SEMICON China 2024

芯片是现代信息技术发展的重要支柱,半导体设备则是芯片产业发展的重要基石。近年来,半导体设备领域开启了国产自研的黄金浪潮,其中,测试机作为芯片测试中至关重要的核心设备之一,国产自研率较低,一直是国内…

面试题:MySQL 事务 日志 MVCC

事务的特性 ACID 事务的隔离级别 并发事务问题 脏读:一个事务读到另一个事务还没有提交的数据不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同幻读:一个事务按照条件查询数据时,没有对应的数据行&#xf…

微软云学习环境

微软公有云 - Microsoft Azure 本文介绍通过微软学习中心Microsoft Learn来免费试用Azure上的服务,也不需要绑定信用卡。不过每天只有几个小时的时间。 官网 https://docs.microsoft.com/zh-cn/learn/ 实践 比如创建虚拟机,看到自己的账号下多了Learn的…

FFmpeg获取视频详情

话不多说&#xff0c;直接上代码&#xff1a; pom依赖&#xff1a; <!--视频多媒体工具包 包含 FFmpeg、OpenCV--><dependency><groupId>org.bytedeco</groupId><artifactId>javacv-platform</artifactId><version>1.5.3</versi…