基于Edison的微信硬件平台
本帖最后由 吹口琴的钢铁侠 于 2015-9-10 20:58 编辑由于一些原因,我测试Edison上的蓝牙发射广播包时,总是出现错误(在树莓派上用同样的代码是可行的),加上已经开始军训,于是我目前只能降低要求(军训完有空会继续折腾之前的设想),在原来基础上,加了些功能。
有兴趣使用这套方案的可以加291715187
该方案的初衷是只用微信来控制物联网,免去开发其他的控制端应用。
此次更改主要加上了Edison,并不是简单地让微信来控制Edison,这太简单了.......
稍微加点难度,想到了在保证控制的及时情况下,减小服务器端的资源消耗。
简单地讲,就是每个Arduino或其他物联网节点,通过Edison来发送传感器数据和获取控制命令。
前面的内容类似于这个帖子,服务器端可以照做,注意要先通过新浪云的实名认证,有自己的VPS资源更佳。
在Edison主要使用node.js,来接受终端的请求和发起对服务器的请求。
在随便一个位置添加以下代码
//httpserverrequestget.js
var http =require('http');
var http2 = require('http');
var url = require('url');
var querystring = require("querystring");
var path1 = '/downup.php?token=doubleq&data=';
var sensordata = '123';
var pathful;
var options;
var resdata;
http.createServer(function(req,res){
res.writeHead(200,{'Content-Type':'text/html'});
var objectUrl = url.parse(req.url);
var objectQuery = querystring.parse(objectUrl.query);
var gething = objectQuery['data'];
pathful = path1+gething;
options = {
host: '1.ulink42.sinaapp.com',
path: pathful,
method: 'GET',
headers: {
'Accept': 'text/html'
}
};
var req = http2.request(options, function(res2) {
res2.setEncoding('utf8');
res2.on('data', function(data) {
console.log(data);
resdata = data;
});
});
req.end();
res.end(resdata);
}).listen(8080);
我测试的物联网终端是DFRobot出的WIDO
用IDE烧写以下的代码
#include <Adafruit_CC3000.h>
#include <ccspi.h>
#include <SPI.h>
#include <string.h>
#include "utility/debug.h"
#define WiDo_IRQ 7
#define WiDo_VBAT5
#define WiDo_CS 10
Adafruit_CC3000 WiDo = Adafruit_CC3000(WiDo_CS, WiDo_IRQ, WiDo_VBAT,
SPI_CLOCK_DIVIDER);
#define WLAN_SSID "yourwifi"
#define WLAN_PASS "yourpswd"
#define WLAN_SECURITY WLAN_SEC_WPA2
int value = 0;
char tem;
char state;
char c;
#define TIMEOUT_MS 20000
void setup(){
Serial.begin(9600);
pinMode(2, OUTPUT);
Serial.println(F("Hello, Wido!\n"));
Serial.println(F("\nInitialising the CC3000 ..."));
if (!WiDo.begin())
{
Serial.println(F("Unable to initialise the CC3000! Check your wiring?"));
while(1);
}
if (!WiDo.connectToAP(WLAN_SSID,WLAN_PASS,WLAN_SECURITY)) {
Serial.println(F("Failed!"));
while(1);
}
Serial.println(F("Connected!"));
Serial.println(F("Request DHCP"));
while (!WiDo.checkDHCP())
{
delay(100);
}
}
void loop(){
static Adafruit_CC3000_Client client;
if(client.connected()){
if(state == '0'){
digitalWrite(2, LOW);
}else if(state == '1'){
digitalWrite(2, HIGH);
}
value = analogRead(0);
value= int(value*0.0048828125*100); //把读取到的val转换为温度数值,系数一:0.00488125=5/1024,0~5V对应模拟口读数1~1024,系数二:100=1000/10,1000是毫伏与伏的转换;10是每10毫伏对应一度温升。
itoa(value,tem,10);
Serial.println(tem);
client.fastrprint("GET /?data=");
client.fastrprint(tem);
client.fastrprint(" HTTP/1.1\r\nHost: 192.168.11.132\r\nUser-Agent: arduino-ethernet\r\nConnection: close");
Serial.println("geted");
client.fastrprint(F("\r\n"));
client.fastrprint(F("\r\n"));
Serial.println();
unsigned long lastRead = millis();
while (client.connected() && (millis() - lastRead < TIMEOUT_MS)) {
while(client.available()) {
c = client.read();
Serial.print(c);
if (c == '{'){
state = client.read();
Serial.print(state);
}
}
}
client.close();
}else{
uint32_t ip = WiDo.IP2U32(192,168,11,132);
client = WiDo.connectTCP(ip,8080);
Serial.println("Connecting IoT Server...");
}
delay(5000);
}
其中发起请求的ip是Edison的地址,务必使他们在同一局域网内,可在Edison的命令行中输入ifconfig来进行查看。
在这个例子中,WIDO收集LM35的温度值,上传到Edison,Edison收到请求后,将数据上传至新浪云上的服务器,并获得控制LED的命令,返回给WIDO,WIDO再对LED进行控制。
没事来我们单位玩啊 数据线好帅喔,求淘宝 大连林海 发表于 2015-9-11 18:29
没事来我们单位玩啊
等我军训完吧...... dsweiliang 发表于 2015-9-12 10:19
数据线好帅喔,求淘宝
质量过硬的数据线,DF商城就有 吹口琴的钢铁侠 发表于 2015-9-13 19:17
质量过硬的数据线,DF商城就有
谢谢 吹口琴的钢铁侠 发表于 2015-9-13 19:16
等我军训完吧......
好的 提前告诉我
页:
[1]