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.1 AT软件框架图 1.2 设备和云端交换的数据类型 1.3 阿里云物模型层总体提供的能力 1 阿里云物模型层功能分析 1.1 AT软件框架图 首先还是来看一 ...

  2. 亿佰特串口服务器接入阿里云物模型使用教程

    在之前的文章中我们了解到虚拟串口软件作为TCP客户端来结合串口服务器使用,这一期我们来看一下串口服务器怎样接入阿里云物模型. 步骤详尽,一文读懂. 硬件准备 ME31-AXAX4040网络IO联网模块 ...

  3. MQTT连接到阿里云物联

    连接到阿里云物联 既然懂得专门连接百度天工物接入,那么连接阿里云物联其实也是一样的,因为都是基于MQTT协议进行通信的,首先打开阿里云物联:https://iot.console.aliyun.com ...

  4. 阿里云code结合git管理代码,运用webHook同步部署服务器代码(php)

    项目场景: 阿里云code结合git管理代码,运用webHook同步部署服务器代码(php) 问题描述: git生成密钥时linux用户为root,php运行用户是www.结果导致在服务器端git p ...

  5. 阿里云物联实现不同设备间的通信

    最近在做项目的时候,发现阿里云物联同一个产品下的设备只能订阅以其设备名命名的topic,无法实现设备之间的通讯,我捣鼓了许久,终于解决了这个问题. 查看阿里云物联的官方文档,在topic的定义下发现了 ...

  6. 问题记录:阿里云ALB七层负载代理配置(为了HTTP协议支持1.2)

    目录 需求 解决过程 总结 需求 使用阿里云ALB七层负载配置ECS中的前后端服务(配置HTTP协议1.2版本) 阿里云产品介绍:什么是应用型负载均衡 解决过程 1.购买ALB产品,我这里是需要暴露到 ...

  7. 阿里云物联平台产品、设备及物模型添加模拟数据(实操)

    目录 一.创建公共实例 二. 创建产品 三.添加设备 四.添加产品功能定义 五.添加自定义功能 六.发布上线 七. 在线调试 八.设置设备属性 九.查看运行状态 十.查看物模型 十一. 扩展部分 十二 ...

  8. 阿里云语音识别模型端核心技术选讲

    摘要: 语音识别技术作为人工智能技术中的重要组成部分,也作为影响人机交互的核心组件之一,从各种智能家用IoT设备的语音交互能力,到公共服务.智慧政务等场合的应用,语音识别技术正在影响着人们生活的方方面 ...

  9. 阿里云短信验证(代码)demo完整教程

    前言: 使用阿里云短信服务的前提你得有阿里云账号(我简直在说废话)没有得话就去注册一个 注册后登陆 教程开始: 阿里云上面有官方得文档以及Demo&SDK,为什么我还要写这篇播客呢,因为上面的 ...

最新文章

  1. 杀毒软件原理后续阶段
  2. ssh-keygen 的 详解
  3. Semaphore、CountDownLatch和CyclicBarrier
  4. 【POJ - 1001 】Exponentiation (Java大数,高精度)
  5. C# DataTable常用方法总结
  6. [PHP开发必备] -- 小巧强悍的MYSQL-Front中文版使用教程,附最新版下载地址
  7. python静态检查工具哪个好用_介绍几款 Python 类型检查工具
  8. 学生成绩管理系统(C语言实现)
  9. Hadoop集群的搭建(结束)——修改hadoop配置文件以及启动集群服务
  10. solidworks工程图剖视图没有从默认的A开始解决办法
  11. Git之(一)Git是什么
  12. 002 姜子牙留计不成,玄子清相府献计
  13. 手机端分页 php,网站开发-php开发手机论坛(9)-分页显示评论
  14. expected 3 got 2 错误提示
  15. 想要改变世界的 Rust 语言
  16. idea2022报错: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
  17. 介孔二氧化硅纳米球 Mesoporous silica nanosphere 的介孔二氧化硅纳米球
  18. 北大青鸟天府校区IT学习大揭秘
  19. 百度EasyDate线上协同数据标注平台使用
  20. c语言 Say Hello to Integers

热门文章

  1. 【STM32】FreeRTOS 调度器开启和任务相关函数详解
  2. 2.12 向量化更多例子-深度学习-Stanford吴恩达教授
  3. STM32 进阶教程 12 - M4的硬件乘法器使用
  4. 类和对象—对象特性—静态成员函数
  5. gettimeofday
  6. 5.Verilog的阻塞赋值=和非阻塞赋值<=
  7. Flocking for Multi-Agent Dynamic Systems:Algorithms and Theory
  8. Android 第三方之MPAndroidChart
  9. 手把手教你在Linux上搭建BitTorrent服务器
  10. MySQL配置文件my.cnf中文详解