本帖最后由 weijinhe 于 2014-10-15 12:47 编辑
设备启动后主动订阅一个特别的主题,名字是 /device_id/device_value_id/device_type_id 服务器如果想控制设备,可以publish一条消息到该主题中,命令可以是: {"device_value_id":"1","device_type_id":"3",”value”:XXX}} 这样便实现了控制 1、硬件准备 (1)Arduino uno (2)舵机模块 (3)Arduino Ethernet W5100 网络扩展板模块 (4)网线一根 2、硬件连接(1)Arduino Ethernet W5100 网络扩展板模块与Arduino uno连接。(2)Arduino Ethernet W5100 网络扩展板模块插上网线
(3)舵机接5V和GND,信号口接数字9号口
3、代码烧写[mw_shl_code=c,true]#include <Servo.h>
#include <JsonArray.h> //json串解析库 可以通过下面链接下载
#include <JsonHashTable.h>
#include <JsonObjectBase.h>
#include <JsonParser.h>
#include <SPI.h>
#include <Ethernet.h>
#include <PubSubClient.h>
byte mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
byte server[] = { 60, 211, 253, 162 };
byte ip[] = { 192, 168, 0, 100 };
char message_buff[100];
int val=50;
Servo myservo;
//接收控制信息,并处理控制信息
void callback(char* topic, byte* payload, unsigned int length) {
int i = 0;
for(i=0; i<length; i++) {
message_buff = payload;
}
message_buff = '\0';
Serial.println(message_buff);
JsonParser<32> parser;
Serial.print("Parse ");
Serial.println(message_buff);
JsonHashTable hashTable = parser.parseHashTable(message_buff);
if (!hashTable.success())
{
Serial.println("JsonParser.parseHashTable() failed");
return;
}
int value = hashTable.getLong("value");
Serial.print("value=");
Serial.println(value);
myservo.write(value);
}
EthernetClient ethClient;
PubSubClient client(server, 1883, callback, ethClient);
void setup()
{
myservo.attach(9);
Serial.begin(9600);
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
Ethernet.begin(mac, ip);
}
Serial.println("connectting");
if (client.connect("arduinoClient")) {
Serial.println("connected");
client.subscribe("/861001002720064/1/1");//device_id、device_value_id、devce_type_id替换为自己ID
}
}
void loop()
{
client.loop();
}[/mw_shl_code] Json格式解析库地址: http://machtalk.net/showapi/arduinolibrary
|