查看: 3891|回复: 6

[对决赛] 基于Edison的微信硬件平台

[复制链接]
本帖最后由 吹口琴的钢铁侠 于 2015-9-10 20:58 编辑
由于一些原因,我测试Edison上的蓝牙发射广播包时,总是出现错误(在树莓派上用同样的代码是可行的),加上已经开始军训,于是我目前只能降低要求(军训完有空会继续折腾之前的设想),在原来基础上,加了些功能。

有兴趣使用这套方案的可以加  291715187

QQ图片20150910205843.jpg
该方案的初衷是只用微信来控制物联网,免去开发其他的控制端应用。
此次更改主要加上了Edison,并不是简单地让微信来控制Edison,这太简单了.......
稍微加点难度,想到了在保证控制的及时情况下,减小服务器端的资源消耗。
简单地讲,就是每个Arduino或其他物联网节点,通过Edison来发送传感器数据和获取控制命令。

前面的内容类似于这个帖子,服务器端可以照做,注意要先通过新浪云的实名认证,有自己的VPS资源更佳。
在Edison主要使用node.js,来接受终端的请求和发起对服务器的请求。
在随便一个位置添加以下代码

  1. //httpserverrequestget.js
  2. var http =require('http');
  3. var http2 = require('http');
  4. var url = require('url');
  5. var querystring = require("querystring");
  6. var path1 = '/downup.php?token=doubleq&data=';
  7. var sensordata = '123';
  8. var pathful;
  9. var options;
  10. var resdata;

  11. http.createServer(function(req,res){
  12.   res.writeHead(200,{'Content-Type':'text/html'});
  13.   var objectUrl = url.parse(req.url);
  14.         var objectQuery = querystring.parse(objectUrl.query);
  15.   var gething = objectQuery['data'];
  16.   pathful = path1+gething;
  17.   options = {
  18.       host: '1.ulink42.sinaapp.com',
  19.       path: pathful,
  20.       method: 'GET',
  21.       headers: {
  22.           'Accept': 'text/html'
  23.       }
  24.   };
  25.   var req = http2.request(options, function(res2) {
  26.       res2.setEncoding('utf8');
  27.       res2.on('data', function(data) {
  28.           console.log(data);
  29.           resdata = data;
  30.       });
  31.   });
  32.   req.end();
  33.   res.end(resdata);
  34. }).listen(8080);
复制代码
我测试的物联网终端是DFRobot出的WIDO
用IDE烧写以下的代码
  1. #include <Adafruit_CC3000.h>
  2. #include <ccspi.h>
  3. #include <SPI.h>
  4. #include <string.h>
  5. #include "utility/debug.h"

  6. #define WiDo_IRQ   7
  7. #define WiDo_VBAT  5
  8. #define WiDo_CS    10

  9. Adafruit_CC3000 WiDo = Adafruit_CC3000(WiDo_CS, WiDo_IRQ, WiDo_VBAT,
  10. SPI_CLOCK_DIVIDER);

  11. #define WLAN_SSID       "yourwifi"
  12. #define WLAN_PASS       "yourpswd"
  13. #define WLAN_SECURITY   WLAN_SEC_WPA2
  14. int value = 0;
  15. char tem[5];
  16. char state;
  17. char c;

  18. #define TIMEOUT_MS      20000

  19. void setup(){
  20.   Serial.begin(9600);
  21.   pinMode(2, OUTPUT);
  22.   Serial.println(F("Hello, Wido!\n"));
  23.   Serial.println(F("\nInitialising the CC3000 ..."));
  24.   if (!WiDo.begin())
  25.   {
  26.     Serial.println(F("Unable to initialise the CC3000! Check your wiring?"));
  27.     while(1);
  28.   }

  29.   if (!WiDo.connectToAP(WLAN_SSID,WLAN_PASS,WLAN_SECURITY)) {
  30.     Serial.println(F("Failed!"));
  31.     while(1);
  32.   }

  33.   Serial.println(F("Connected!"));
  34.   Serial.println(F("Request DHCP"));
  35.   while (!WiDo.checkDHCP())
  36.   {
  37.     delay(100);
  38.   }
  39. }


  40. void loop(){
  41.   static Adafruit_CC3000_Client client;

  42.   if(client.connected()){

  43.     if(state == '0'){
  44.       digitalWrite(2, LOW);      
  45.     }else if(state == '1'){
  46.       digitalWrite(2, HIGH);
  47.     }
  48.    

  49.    
  50.     value = analogRead(0);
  51.     value= int(value*0.0048828125*100);   //把读取到的val转换为温度数值,系数一:0.00488125=5/1024,0~5V对应模拟口读数1~1024,系数二:100=1000/10,1000是毫伏与伏的转换;10是每10毫伏对应一度温升。
  52.     itoa(value,tem,10);
  53.     Serial.println(tem);
  54.     client.fastrprint("GET /?data=");
  55.     client.fastrprint(tem);
  56.     client.fastrprint(" HTTP/1.1\r\nHost: 192.168.11.132\r\nUser-Agent: arduino-ethernet\r\nConnection: close");
  57.     Serial.println("geted");
  58.     client.fastrprint(F("\r\n"));
  59.     client.fastrprint(F("\r\n"));

  60.     Serial.println();

  61.     unsigned long lastRead = millis();
  62.     while (client.connected() && (millis() - lastRead < TIMEOUT_MS)) {
  63.       while(client.available()) {
  64.         c = client.read();
  65.         Serial.print(c);
  66.         if (c == '{'){
  67.             state = client.read();
  68.             Serial.print(state);
  69.         }
  70.       }
  71.     }
  72.     client.close();
  73.   }else{
  74.     uint32_t ip = WiDo.IP2U32(192,168,11,132);
  75.     client = WiDo.connectTCP(ip,8080);
  76.     Serial.println("Connecting IoT Server...");
  77.   }
  78.   delay(5000);
  79. }
复制代码

其中发起请求的ip是Edison的地址,务必使他们在同一局域网内,可在Edison的命令行中输入ifconfig来进行查看。
在这个例子中,WIDO收集LM35的温度值,上传到Edison,Edison收到请求后,将数据上传至新浪云上的服务器,并获得控制LED的命令,返回给WIDO,WIDO再对LED进行控制。

大连林海  初级技神

发表于 2015-9-11 18:29:25

没事来我们单位玩啊
回复 支持 反对

使用道具 举报

dsweiliang  版主

发表于 2015-9-12 10:19:58

数据线好帅喔,求淘宝
回复 支持 反对

使用道具 举报

吹口琴的钢铁侠  版主
 楼主|

发表于 2015-9-13 19:16:47

大连林海 发表于 2015-9-11 18:29
没事来我们单位玩啊

等我军训完吧......
回复 支持 反对

使用道具 举报

吹口琴的钢铁侠  版主
 楼主|

发表于 2015-9-13 19:17:11

dsweiliang 发表于 2015-9-12 10:19
数据线好帅喔,求淘宝

质量过硬的数据线,DF商城就有
回复 支持 反对

使用道具 举报

dsweiliang  版主

发表于 2015-9-13 22:53:50

吹口琴的钢铁侠 发表于 2015-9-13 19:17
质量过硬的数据线,DF商城就有

谢谢
回复 支持 反对

使用道具 举报

大连林海  初级技神

发表于 2015-9-13 23:17:55


好的 提前告诉我
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
wifi气象站

硬件清单

btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2019 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail