Tuesday, October 25, 2016

QNAP NAS + Arduino Yun 开发实作小记 - MQTT, NodeRED

轉貼自:Arduino中文社区


jackhebe LV1

2016-10-22 15:04
楼主

QNAP NAS + Arduino 开发实作小记


今天入手一套Arduino开发套装,开始捣鼓这套开发板。手上有一台 QNAP NAS TS-251查看了官方资料,发现支持QIOT技术,于是开始研究。

QNAP Container Station 支持 LXC 与 Docker® 两项轻量级虚拟技术,提供多元丰富的软件容器,是开发者轻松利用、快速开发,与便利部署物联网应用的最佳平台。立即在 Container Station 内搜索「IoT」,获取适用的软件容器,便可以多元开创您的物联网应用。利用「QIoT Containers」设计 IoT 应用组件,您便可享有更高的自主性来创造专属又具隐私的 IoT 私有云平台。只要在每个建构步骤选择一个软件容器,并安装于 Container Station,短短几分钟就能架构完成、开始使用。 
给开发者的「QIoT Containers」Starter Kits
开发者仅需数十美金的成本,在开发板 (如:Raspberry Pi) 上连接上烟雾、温度、或湿度传感器,即可快速开发出一套简易的智能家庭项目。QIoT Containers 提供多种通讯协议以及 Dashboard 组件,帮助用户轻易地将传感器接至开发板,并在 QNAP NAS 中设置 MQTT、Node-RED、Freeboard 等组件。由传感器接收到的数据则会通过网络回传至 NAS,用户可通过 Dashboard 的呈现来同时远程监测家中环境质量。

Arduino是一款便捷灵活、方便上手的开源电子原型平台。包含硬件(各种型号的Arduino板)和软件(Arduino IDE)。由一个欧洲开发团队于2005年冬季开发。其成员包括Massimo Banzi、David Cuartielles、Tom Igoe、Gianluca Martino、David Mellis和Nicholas Zambetti。

它构建于开放原始码simple I/O介面版,并且具有使用类似Java、C语言的Processing/Wiring开发环境。主要包含两个主要的部分:硬件部分是可以用来做电路连接的Arduino电路板;另外一个则是Arduino IDE,你的计算机中的程序开发环境。你只要在IDE中编写程序代码,将程序上传到Arduino电路板后,程序便会告诉Arduino电路板要做些什么了。
Arduino能通过各种各样的传感器来感知环境,通过控制灯光、马达和其他的装置来反馈、影响环境。板子上的微控制器可以通过Arduino的编程语言来编写程序,编译成二进制文件,烧录进微控制器。对Arduino的编程是利用 Arduino编程语言 (基于 Wiring)和Arduino开发环境(基于 Processing)来实现的。基于Arduino的项目,可以只包含Arduino,也可以包含Arduino和其他一些在PC上运行的软件,他们之间进行通信 (比如 Flash, Processing, MaxMSP)来实现。

arduino yun 板子
大家看到我将开发板与扩展板进行了连接
第一只红灯 系统通电会常亮 。
第二只绿灯 当按下旁边的按钮,它会常亮。
第三只绿灯 当收到满足条件的信号会亮

连接比较简单,这里不作详细说明
这里是烧录到开发板的程序,使用 Arduino IDE工具编译烧录
这段的作用是 向MQTT服务器订阅消息,当收到传来的消息,就做相应硬件的控制。在这个例子里,我们控制第三只灯亮。
下面贴上代码:

[mw_shl_code=applescript,true]#include
#include
#include


#define LED_PIN 7
#define RED_LIGHT_PIN 13


IPAddress server(0xA, 0xC, 0x13, 0xD2);
YunClient yunClient;
PubSubClient client(server,1883,callback,yunClient);


void callback(char* topic,byte* payload, unsigned int length){
if(0 == strcmp(topic,"/command/light/")){
  Serial.println(length);
  char buf[length + 1];
  memset(buf,'\0',sizeof(buf));
  memcpy(buf,(char*)payload,length);
  digitalWrite(LED_PIN, 0 == strcmp(buf,"false") ? LOW: HIGH);
  Serial.println(buf);
   }else
   if(0 == strcmp(topic,"/command/airconditioning/")){
  Serial.println(length);
  char buf[length + 1];
  memset(buf,'\0',sizeof(buf));
  memcpy(buf,(char*)payload,length);
  digitalWrite(RED_LIGHT_PIN, 0 == strcmp(buf,"false") ? LOW: HIGH);
  Serial.println(buf);
   }
};


void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    if (client.connect("arduinoClient")) {
   Serial.println("connected");
  client.publish("/info/login/","{'Deivceid'}");
  client.subscribe("/command/#");
    } else {
   Serial.print("failed, rc=");
   Serial.print(client.state());
   Serial.println(" try again in 5 seconds");
   // Wait 5 seconds before retrying
   delay(5000);
    }
}
}


void setup() {
// put your setup code here, to run once:
    //Initialize serial and wait for port to open:
Serial.begin(9600);
//while (!Serial) {
//; // wait for serial port to connect. Needed for Leonardo only
// }
Bridge.begin();
// initialize digital pin 13 as an output.
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, HIGH);

pinMode(RED_LIGHT_PIN, OUTPUT);
digitalWrite(RED_LIGHT_PIN, HIGH);
}


void loop() {
// put your main code here, to run repeatedly:
if (!client.connected()) {
    reconnect();
}
    client.loop();
}
[/mw_shl_code]

这里讲怎么安装Container 及 MQTT服务器

进入到NAS的 App Center
找到Container Station
搜索qiot-ponte 然后下载安装
搜索qiot-node 下载安装
稍等些时间,就会下载完毕,然后安装。
安装好后, 打开qiot-node 点击如图片所示链接
打开后,编辑MQTT消息处理的规则
最后写了一个手机APP发布MQTT消息给服务器,就能控制到灯。

以下是我用手机端MQTT工具模拟发送指令使第三只灯亮的视频。
http://v.youku.com/v_show/id_XMTc2OTM2NTQ0NA==.html

  

No comments:

Post a Comment

發表一下意見,互動一下唄!

LinkWithin

Related Posts Plugin for WordPress, Blogger...

Adventure Book 2.0 Headline Animator

GoogleAd

funP Android 相關文章