阿里云物模型层初始化代码实现
1 代码实现
直接代码实现:
aliyun.h:
#ifndef __ALIYUN_H
#define __ALIYUN_H#include <stdint.h>
#include <stdbool.h>#define PORT 1883
#define SERVER "iot-as-mqtt.cn-shanghai.aliyuncs.com" //"a1gPAyS0jai.iot-as-mqtt.cn-shanghai.aliyuncs.com"
#define TOPIC_SUB "thing/model/down_raw" //"/sys/a1gPAyS0jai/s0001/thing/model/down_raw"
#define TOPIC_PUB "thing/model/up_raw" //"/sys/a1gPAyS0jai/s0001/thing/model/up_raw"typedef void(*aliyun_recv_callback)(uint8_t type,uint32_t id,uint8_t *pdata,uint16_t dada_len);bool aliyun_init(char *prokey,char *devname,char *devsecret);
bool aliyun_deinit(void);bool aliyun_online(void);
bool aliyun_offline(void);
bool aliyun_send(uint8_t type,uint32_t id,uint8_t *pdata,uint16_t dada_len);
bool aliyun_recv_register(aliyun_recv_callback cb);#endif
aliyun.c:
#include <stdbool.h>
#include <string.h>
#include <stdint.h>
#include <stdio.h>
#include "aliyun.h"
#include "at_net.h"
#include "dev_sim7020.h"
#include "app_debug.h"#include "FreeRTOS.h"
#include "task.h"#define MAX_SERVER_LEN 80
#define MAX_TOPIC_LEN 80static bool is_inited=false;
typedef enum
{ONLINE_STATE_CONNECT,ONLINE_STATE_ERR,
}online_state_e;struct aliyun_control
{char *prokey;char *devname;char *devsecret;char server[MAX_SERVER_LEN];char topic_sub[MAX_TOPIC_LEN];char topic_pub[MAX_TOPIC_LEN];
}ali_ctl;bool aliyun_init(char *prokey,char *devname,char *devsecret)
{DEBUG("aliyun init");if(prokey==NULL)return false;if(devname==NULL)return false;if(devsecret==NULL)return false;memset(&ali_ctl,0,sizeof(ali_ctl));ali_ctl.prokey=prokey;ali_ctl.devname=devname;ali_ctl.devsecret=devsecret;snprintf(ali_ctl.server,MAX_SERVER_LEN,"%s.%s",prokey,SERVER);snprintf(ali_ctl.topic_sub,MAX_TOPIC_LEN,"/sys/%s/%s/%s",prokey,devname,TOPIC_SUB);snprintf(ali_ctl.topic_pub,MAX_TOPIC_LEN,"/sys/%s/%s/%s",prokey,devname,TOPIC_PUB);do{if(at_net_dev_register(&dev_sim7020)==false)break;if(at_net_init()==false)break;is_inited=true;DEBUG("aliyun init sucess"); return true;} while (0);aliyun_deinit();return false;
}
bool aliyun_deinit(void)
{is_inited=false;at_net_dev_unregister();memset(&ali_ctl,0,sizeof(ali_ctl));return true;
}bool aliyun_online(void)
{uint8_t state=ONLINE_STATE_CONNECT;uint8_t err=0;while (1){switch (state){case ONLINE_STATE_CONNECT:if(at_net_mqtt_connect(ali_ctl.server,PORT,ali_ctl.prokey,ali_ctl.devname,ali_ctl.devsecret)==false)state= ONLINE_STATE_ERR; if(at_net_mqtt_sub(ali_ctl.topic_sub)==false)state= ONLINE_STATE_ERR;return true;case ONLINE_STATE_ERR:err++;if(err>3)return false;if(at_net_deinit()==false)break;if(at_net_init()==false)break;state=ONLINE_STATE_CONNECT;break;default:return false;}vTaskDelay(10);}return false;
}
bool aliyun_offline(void)
{if(is_inited==false)return false;at_net_mqtt_disconnect();return true;
}
阿里云物模型层初始化代码实现相关推荐
- 阿里云物模型层功能分析
文章目录 1 阿里云物模型层功能分析 1.1 AT软件框架图 1.2 设备和云端交换的数据类型 1.3 阿里云物模型层总体提供的能力 1 阿里云物模型层功能分析 1.1 AT软件框架图 首先还是来看一 ...
- 亿佰特串口服务器接入阿里云物模型使用教程
在之前的文章中我们了解到虚拟串口软件作为TCP客户端来结合串口服务器使用,这一期我们来看一下串口服务器怎样接入阿里云物模型. 步骤详尽,一文读懂. 硬件准备 ME31-AXAX4040网络IO联网模块 ...
- MQTT连接到阿里云物联
连接到阿里云物联 既然懂得专门连接百度天工物接入,那么连接阿里云物联其实也是一样的,因为都是基于MQTT协议进行通信的,首先打开阿里云物联:https://iot.console.aliyun.com ...
- 阿里云code结合git管理代码,运用webHook同步部署服务器代码(php)
项目场景: 阿里云code结合git管理代码,运用webHook同步部署服务器代码(php) 问题描述: git生成密钥时linux用户为root,php运行用户是www.结果导致在服务器端git p ...
- 阿里云物联实现不同设备间的通信
最近在做项目的时候,发现阿里云物联同一个产品下的设备只能订阅以其设备名命名的topic,无法实现设备之间的通讯,我捣鼓了许久,终于解决了这个问题. 查看阿里云物联的官方文档,在topic的定义下发现了 ...
- 问题记录:阿里云ALB七层负载代理配置(为了HTTP协议支持1.2)
目录 需求 解决过程 总结 需求 使用阿里云ALB七层负载配置ECS中的前后端服务(配置HTTP协议1.2版本) 阿里云产品介绍:什么是应用型负载均衡 解决过程 1.购买ALB产品,我这里是需要暴露到 ...
- 阿里云物联平台产品、设备及物模型添加模拟数据(实操)
目录 一.创建公共实例 二. 创建产品 三.添加设备 四.添加产品功能定义 五.添加自定义功能 六.发布上线 七. 在线调试 八.设置设备属性 九.查看运行状态 十.查看物模型 十一. 扩展部分 十二 ...
- 阿里云语音识别模型端核心技术选讲
摘要: 语音识别技术作为人工智能技术中的重要组成部分,也作为影响人机交互的核心组件之一,从各种智能家用IoT设备的语音交互能力,到公共服务.智慧政务等场合的应用,语音识别技术正在影响着人们生活的方方面 ...
- 阿里云短信验证(代码)demo完整教程
前言: 使用阿里云短信服务的前提你得有阿里云账号(我简直在说废话)没有得话就去注册一个 注册后登陆 教程开始: 阿里云上面有官方得文档以及Demo&SDK,为什么我还要写这篇播客呢,因为上面的 ...
最新文章
- 杀毒软件原理后续阶段
- ssh-keygen 的 详解
- Semaphore、CountDownLatch和CyclicBarrier
- 【POJ - 1001 】Exponentiation (Java大数,高精度)
- C# DataTable常用方法总结
- [PHP开发必备] -- 小巧强悍的MYSQL-Front中文版使用教程,附最新版下载地址
- python静态检查工具哪个好用_介绍几款 Python 类型检查工具
- 学生成绩管理系统(C语言实现)
- Hadoop集群的搭建(结束)——修改hadoop配置文件以及启动集群服务
- solidworks工程图剖视图没有从默认的A开始解决办法
- Git之(一)Git是什么
- 002 姜子牙留计不成,玄子清相府献计
- 手机端分页 php,网站开发-php开发手机论坛(9)-分页显示评论
- expected 3 got 2 错误提示
- 想要改变世界的 Rust 语言
- idea2022报错: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
- 介孔二氧化硅纳米球 Mesoporous silica nanosphere 的介孔二氧化硅纳米球
- 北大青鸟天府校区IT学习大揭秘
- 百度EasyDate线上协同数据标注平台使用
- c语言 Say Hello to Integers
热门文章
- 【STM32】FreeRTOS 调度器开启和任务相关函数详解
- 2.12 向量化更多例子-深度学习-Stanford吴恩达教授
- STM32 进阶教程 12 - M4的硬件乘法器使用
- 类和对象—对象特性—静态成员函数
- gettimeofday
- 5.Verilog的阻塞赋值=和非阻塞赋值<=
- Flocking for Multi-Agent Dynamic Systems:Algorithms and Theory
- Android 第三方之MPAndroidChart
- 手把手教你在Linux上搭建BitTorrent服务器
- MySQL配置文件my.cnf中文详解