本帖最后由 吹口琴的钢铁侠 于 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_VBAT  5
 - #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[5];
 - 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进行控制。 
 
 |