• Stars
    star
    131
  • Rank 275,867 (Top 6 %)
  • Language
    C++
  • License
    MIT License
  • Created about 5 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

运行于 arduino 的 阿里云 IoT 接入 SDK,在底层连接的基础上增加数据回调绑定、发送数据和事件等 api 的封装,免去自己解析数据的痛苦

Arduino TopLevel Client for aliyun IoT Platform

AliyunIoTSDK 可以帮助你快速连接阿里云 IoT 平台,通过和阿里云物联网开发平台配合,可快速实现各种硬件应用,包括了很上层的封装,无需自己解析数据体,绑定事件即可,在 esp8266 平台充分测试(NodeMCU 1.0)

update

  • v0.2 增加属性发送 buffer,5秒一次或者10条buffer满,才会一起发送数据,节省请求次数
  • v0.1 上线

依赖项

  • Arduino需要安装 ArduinoJson,Crypto,PubSubClient库
  • Esp8266 需要在Arduino中安装 ESP8266库

Usage 使用示例

// 引入 wifi 模块,并实例化,不同的芯片这里的依赖可能不同
#include <ESP8266WiFi.h>
static WiFiClient espClient;

// 引入阿里云 IoT SDK
#include <AliyunIoTSDK.h>

// 设置产品和设备的信息,从阿里云设备信息里查看
#define PRODUCT_KEY "xxx"
#define DEVICE_NAME "Device_D"
#define DEVICE_SECRET "xxxxxxxxxxxxxx"
#define REGION_ID "cn-shanghai"

// 设置 wifi 信息
#define WIFI_SSID "xxxxx"
#define WIFI_PASSWD "xxxxx"

void setup()
{
    Serial.begin(115200);
    
    // 初始化 wifi
    wifiInit(WIFI_SSID, WIFI_PASSWD);
    
    // 初始化 iot,需传入 wifi 的 client,和设备产品信息
    AliyunIoTSDK::begin(espClient, PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET, REGION_ID);
    
    // 绑定一个设备属性回调,当远程修改此属性,会触发 powerCallback
    // PowerSwitch 是在设备产品中定义的物联网模型的 id
    AliyunIoTSDK::bindData("PowerSwitch", powerCallback);
    
    // 发送一个数据到云平台,LightLuminance 是在设备产品中定义的物联网模型的 id
    AliyunIoTSDK::send("LightLuminance", 100);
}

void loop()
{
    AliyunIoTSDK::loop();
}

// 初始化 wifi 连接
void wifiInit(const char *ssid, const char *passphrase)
{
    WiFi.mode(WIFI_STA);
    WiFi.begin(ssid, passphrase);
    while (WiFi.status() != WL_CONNECTED)
    {
        delay(1000);
        Serial.println("WiFi not Connect");
    }
    Serial.println("Connected to AP");
}

// 电源属性修改的回调函数
void powerCallback(JsonVariant p)
{
    int PowerSwitch = p["PowerSwitch"];
    if (PowerSwitch == 1)
    {
        // 启动设备
    } 
}

API 可用方法

// 在主程序 loop 中调用,检查连接和定时发送信息
  static void loop();

  /**
   * 初始化程序
   * @param ssid wifi名
   * @param passphrase wifi密码
   */
  static void begin(Client &espClient,
                    const char *_productKey,
                    const char *_deviceName,
                    const char *_deviceSecret,
                    const char *_region);

  /**
   * 发送数据
   * @param param 字符串形式的json 数据,例如 {"${key}":"${value}"}
   */
  static void send(const char *param);
  /**
   * 发送 float 格式数据
   * @param key 数据的 key
   * @param number 数据的值
   */
  static void send(char *key, float number);
  /**
   * 发送 int 格式数据
   * @param key 数据的 key
   * @param number 数据的值
   */
  static void send(char *key, int number);
  /**
   * 发送 double 格式数据
   * @param key 数据的 key
   * @param number 数据的值
   */
  static void send(char *key, double number);
  /**
   * 发送 string 格式数据
   * @param key 数据的 key
   * @param text 数据的值
   */
  static void send(char *key, char *text);

  /**
   * 发送事件到云平台(附带数据)
   * @param eventId 事件名,在阿里云物模型中定义好的
   * @param param 字符串形式的json 数据,例如 {"${key}":"${value}"}
   */
  static void sendEvent(const char *eventId, const char *param);
  /**
   * 发送事件到云平台(空数据)
   * @param eventId 事件名,在阿里云物模型中定义好的
   */
  static void sendEvent(const char *eventId);

  /**
   * 绑定回调,所有云服务下发的数据都会进回调
   */
  // static void bind(MQTT_CALLBACK_SIGNATURE);

  /**
   * 绑定事件回调,云服务下发的特定事件会进入回调
   * @param eventId 事件名
   */
  // static void bindEvent(const char * eventId, MQTT_CALLBACK_SIGNATURE);
  /**
   * 绑定属性回调,云服务下发的数据包含此 key 会进入回调,用于监听特定数据的下发
   * @param key 物模型的key
   */
  static int bindData(char *key, poniter_fun fp);
  /**
   * 卸载某个 key 的所有回调(慎用)
   * @param key 物模型的key
   */
  static int unbindData(char *key);

Examples 示例

buiding...

Limitations 使用限制和说明

  • 本库不包含 wifi 连接的代码,需先建立连接,然后将 client 传入
  • 依赖 PubSubClient ,在使用前,请务必修改 PubSubClient 的连接参数,否则无法使用
  • PubSubClient 中的 MQTT_MAX_PACKET_SIZE 修改为 1024
  • PubSubClient 中的 MQTT_KEEPALIVE 修改为 60
  • 掉线后会一直尝试重新连接,可能会触发阿里云的一些限流规则(已经做了规避),并且会导致挤掉其他同设备 ID 的设备
  • 默认 5000ms 检测一次连接状态,可以通过 CHECK_INTERVAL 修改此值

Compatible Hardware 适用硬件

本 SDK 基于 PubSubClient 底层库开发,兼容列表与 PubSubClient 相同。

The library uses the Arduino Ethernet Client api for interacting with the underlying network hardware. This means it Just Works with a growing number of boards and shields, including:

  • Arduino Ethernet
  • Arduino Ethernet Shield
  • Arduino YUN – use the included YunClient in place of EthernetClient, and be sure to do a Bridge.begin() first
  • Arduino WiFi Shield - if you want to send packets > 90 bytes with this shield, enable the MQTT_MAX_TRANSFER_SIZE define in PubSubClient.h.
  • Sparkfun WiFly Shield – library
  • TI CC3000 WiFi - library
  • Intel Galileo/Edison
  • ESP8266
  • ESP32

The library cannot currently be used with hardware based on the ENC28J60 chip – such as the Nanode or the Nuelectronics Ethernet Shield. For those, there is an alternative library available.

License

This code is released under the MIT License.

More Repositories

1

js2image

一个可以把js源代码压缩成一个ascii字符画的源代码的工具,压缩后的代码仍可运行 (A tool can compress JavaScript code to any ascii image and still run normally )
JavaScript
1,533
star
2

sketch-to-html

从 sketch 转换成 html,已无更新。。
JavaScript
681
star
3

antd-visual-editor

ant-design 组件库实时可视化编辑器,实时生成 react 代码
JavaScript
572
star
4

Rabbit.js

一个烂尾项目,仅供吐槽
JavaScript
236
star
5

wechat-ai-summarize-bot

微信群聊总结助手 Nodejs 版
TypeScript
140
star
6

s-mobx

轻量级mobx实现,仅供参考
JavaScript
125
star
7

eslint-plugin-996

a eslint plugin save you from 996
JavaScript
108
star
8

colors-web

自由/简单地让浏览器的console变的五彩斑斓。chalk or colors like library, use in browser console , with any colors
TypeScript
60
star
9

hancode

把你的JS代码翻译成中文书写的代码,并且可执行
JavaScript
41
star
10

qiaowei

社交网络辅助工具,企业用户和个人用户均可。致力于灵活解放生产力,而不是病毒营销。
JavaScript
28
star
11

my-public-share-keys

这些年来公开分享的一些文档整理,持续更新
28
star
12

nestjs-prisma-example

around nestjs, with prisma and some graphql lib,write less code,create power api
TypeScript
26
star
13

eth-self-token-example

在本地网络发布一个名叫 YuTou 的 token
TypeScript
18
star
14

Neon-work-clock

在新的标签页中显示一个漂亮的显示工作状态和时间的霓虹灯界面,可以控制是否在工作中,并统计工作时间等
HTML
15
star
15

xmind-to-ascii

transelate xmind to ascii structure
GCC Machine Description
15
star
16

gitlab-code-report

自动爬取gitlab,生成代码提交,代码变更行数,mr,issues 数据和排行
JavaScript
13
star
17

node-renren

nodejs版人人网oauth认证和api sdk
JavaScript
12
star
18

node-taobao

taobao api的nodejs sdk
JavaScript
11
star
19

frontend-modern-experience-share-slide

一个关于Web 体验技术发展前沿的小分享
Vue
10
star
20

kuihuabaodian

葵花宝典,不解释
JavaScript
10
star
21

auto_create_sequelize_models

this repo can auto create sequelize models from exist mysql.
CoffeeScript
8
star
22

hotconfig

hot config for nodejs
CoffeeScript
7
star
23

node-weibov2

基于node-weibo-v2改进的node平台微博v2接口sdk
JavaScript
7
star
24

CHKeychain

a tool to read and write info to ios keychain
Objective-C
7
star
25

beian.js

模拟代码中字符串备案的情形
JavaScript
7
star
26

queue_do

异步队列同步化,支持递归嵌套
JavaScript
7
star
27

koa-auto-controller

auto generate controller by folder struct for koa
JavaScript
6
star
28

mwc_control

用arduino输出pwm信号控制mwc飞控
Arduino
5
star
29

htmljs

the code for www.html-js.com 前端乱炖 in Age of Freedom
JavaScript
5
star
30

yaninput-plugin

可以任意嵌入App的颜文字输入法插件,一句话即可集成颜文字输入功能到自己的App中。
Objective-C
4
star
31

node-douban

豆瓣的nodejs实现的SDK
JavaScript
4
star
32

webpack-browserify-babel-rollup-example

这是一个示例项目,展示babel,browerify,webpack,rollup四者的基本用法,以及四者编译后的结果,可以借此了解这四个玩意到底是干了些什么事情。
JavaScript
4
star
33

walk_do

遍历文件夹并处理所得文件,支持同步遍历和异步遍历,同步遍历顺序严格使用深度搜索算法
JavaScript
4
star
34

my-booklist

我的书单,欢迎杭州的学生借阅。
3
star
35

animate-num

up to num with animate
JavaScript
3
star
36

fastdemo

make fast demo env use nodejs
JavaScript
3
star
37

mobiview

view or share your site with mobile style
TypeScript
3
star
38

eslint-plugin-kfc-crazy

a lint for KFC Crazy Thursday
JavaScript
3
star
39

readOnlineFile

读取远程图片或者文件并存储到本地
JavaScript
3
star
40

node-tqq

nodejs版腾讯api sdk
JavaScript
3
star
41

formatjson

format json
JavaScript
2
star
42

wp-pc-wallpaper

Wonderpal NFT PC Wallpaper generator
TypeScript
2
star
43

authorize

国内各大微博的authorize链接生成方法集合。原理基本一样,稍有差别。
JavaScript
2
star
44

fly_control_ios

蓝牙控制四轴的客户端程序
Objective-C
1
star
45

cpu-overload-monitor

display cpu overload status in terminal
JavaScript
1
star
46

s-ioc

这是一个试验项目,主要是学习下如何实现 ioc 模式
TypeScript
1
star
47

somethingfrom2009

从学习前端来瞎写的各种乱七八糟的东西。
JavaScript
1
star
48

the-most-beautiful-html-construction

the most beautiful html construction
1
star
49

changelog-clog

JavaScript
1
star
50

sns-error-info

整理各SNS平台的错误码所对应的英文和中文描述,可自己扩展,方便在应用中错误提示,也可以当做手册查询
JavaScript
1
star
51

tap-plus-one

一个 arduino 程序,点一次加一,传说程序员通过这个装置来记录每天被骚扰的次数
Arduino
1
star
52

htmljs-publish-atom

一个atom编辑器的插件,直接把markdown文件发送到前端乱炖(www.html-js.com)网站的专栏。
CoffeeScript
1
star