查看: 10967|回复: 16

【NO.28】仿写Yeelink物联平台,自建物联服务器

[复制链接]
  • TA的每日心情
    奋斗
    2015-10-30 10:45
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-1 20:16 | 显示全部楼层 |阅读模式
    本帖最后由 某1o 于 2014-10-10 17:49 编辑

    抱歉哈~传代码传错了……传了个不完全的~{:soso_e130:}已经重新传了
    下载:http://lbdl.qiniudn.com/home.zip

    最近看Yeelink直接透明数据不爽,干脆自己写了个php服务器端程序+arduino端程序
    前台页面:http://i.liub.org/arduino



    采用JS做Ajax动态刷新温度&开关状态 Jquery mobile做UI,适合移动终端访问(电脑看着可能有点不适)
    QQ截图20141001200545.png 效果图&接线图摄像头坏了有些模糊,DHT11并没有接入,因为我的DHT11坏了让我扔了,不过代码还是好用的~
    QQ%E5%9B%BE%E7%89%8720141001205044.jpg

    QQ%E5%9B%BE%E7%89%8720141001205056.jpg

    QQ%E5%9B%BE%E7%89%8720141001205622.jpg
    QQ%E5%9B%BE%E7%89%8720141001205627.jpg

    到了重要部分了~上源码!

    项目部分源代码:本项目采用了W5100网络模块,DHT11温湿度传感器和一个LED

    arduino源码(请注意服务器地址,在代码中出现两次不同位置,请自行更改):

    kittenblock中小学创客名师推荐的图形化编程软件

    #include <SPI.h>
    #include <Ethernet.h>
    #include <dht11.h>
    dht11 DHT11;
    #define DHT11PIN 2//DHT11接在pin2
    int ledp=8;//led接在pin8
    byte mac[] = { 0x00, 0x16, 0x22, 0x33, 0x44, 0x55 };//MAC
    char server[] = "XXXX.com";//服务器地址
    IPAddress ip(192,168,31,177);//自动获取IP失败时手动定义IP
    EthernetClient client;
    String curl = "";
    String cmd = "";
    
    void setup(){
            Serial.begin(9600);
            Serial.println("****SETUP Start****");
            pinMode(ledp,OUTPUT);
            curl.reserve(60);
            if (Ethernet.begin(mac) == 0) {
                    Serial.println("Failed DHCP");
                    Ethernet.begin(mac, ip);//使用预设IP/mac
            }
            DHT11.read(DHT11PIN);
            Serial.println((float)DHT11.humidity, 2);//尝试读取DHT11
            Serial.println((float)DHT11.temperature, 2);//尝试读取DHT11
            Serial.print("Arduino is at ");
            Serial.println(Ethernet.localIP());//输出ip
            Serial.println("****SETUP End****");
    }
    
    void loop(){
                    readcmd();
                    httpconn();
    }
    //读取服务器信息
    void readcmd(){
            Serial.println(client.available());
            while (client.available()) {
                    char c = client.read();
                    curl += c;//curl不断累加char c
                    if (c == '{') {//如果c={
                            curl = "";//清除curl内容
                    }
                    if(c == '}') {//c收到了}
                            cmd = curl;//把curl赋值给cmd
                            Serial.println("Command:" + cmd);
                            runcmd();
                            break;
                    }
            }
            if (!client.connected()) {
                            Serial.println();
                            Serial.println("Disconnecting.");
                            client.stop();
                    }
    }
    //http连接
    void httpconn(){
            Serial.println("Read DHT11");
            DHT11.read(DHT11PIN);//读取DHT11
            Serial.println("Connecting...");
            if (client.connect(server, 80)){//连接服务器
                    Serial.println("Connected");
                    client.print("GET /arduino/api.php?arduino=yes");//这里/arduino/api.php根据实际修改
                    client.print("&wet=");
                    client.print((float)DHT11.humidity, 2);
                    client.print("&temp=");
                    client.print((float)DHT11.temperature, 2);
                    client.println(" HTTP/1.1");
                    client.println("Host: XXXXX.com");//服务器地址
                    client.println("Connection: close");
                    client.println();
                    Serial.println("Send success!");
            }else{
                    Serial.println("Connection failed");
            }
            delay(1500);
    }
    //匹配cmd执行命令
    void runcmd(){
            if(cmd == "led_1_1}"){
                    digitalWrite(ledp,HIGH);//开灯
            }
            if(cmd == "led_1_0}"){
                    digitalWrite(ledp,LOW);//关灯
            }
    }



    php代码:

    kittenblock中小学创客名师推荐的图形化编程软件

    <?php
    date_default_timezone_set('Asia/Shanghai');
            if($_GET['arduino'] == "yes"){
                    $file = fopen("web_api","w"); 
                    fwrite($file,"湿度(%):"); 
                    fwrite($file,$_GET['wet']); 
                    fwrite($file,"%;<br />温度(°C):"); 
                    fwrite($file,$_GET['temp']); 
                    fwrite($file,"°C;<br />最后更新:");
                    fwrite($file, date('Y-m-d H:i:s',time()));
                    fclose($file);
                    $sendcmdfile = fopen("cmd_api","r");
                    $sendcmd = "";
                    while (!feof($sendcmdfile)) {
                            $sendcmd .= fread($sendcmdfile, 1024);
                    }
                    fclose($sendcmdfile);
                    echo $sendcmd;
            }
            if ($_POST['web'] == "yes") {
                    $savecmd = fopen("cmd_api", "w");
                    fwrite($savecmd,$_POST['status']); 
                    fclose($savecmd);
            }
    ?>



    项目全部源码打包下载:http://lbdl.qiniudn.com/home.zip


    该用户从未签到

    发表于 2014-10-2 20:30 | 显示全部楼层
    {:soso_e142:}
  • TA的每日心情

    2017-9-1 00:12
  • 签到天数: 65 天

    [LV.6]常住居民II

    发表于 2014-10-3 16:27 | 显示全部楼层
    再加几步,就可以像我这样微信控制了http://www.arduino.cn/thread-7368-1-1.html{:soso_e129:}
  • TA的每日心情
    奋斗
    2015-10-30 10:45
  • 签到天数: 2 天

    [LV.1]初来乍到

     楼主| 发表于 2014-10-3 20:28 | 显示全部楼层
    吹口琴的钢铁侠 发表于 2014-10-3 16:27
    再加几步,就可以像我这样微信控制了http://www.arduino.cn/thread-7368-1-1.html ...

    我不太喜欢用微信,所以也没有研究过微信平台的,这个通过web稍加改进,比如加个登陆密码,更改下存储命令&数据的格式,就可以做自己的物联服务器,别人没密码是没法知道你任何信息的~~ 就看你怎么玩了,我只是提供个方法
  • TA的每日心情
    郁闷
    2019-1-25 09:07
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2014-10-10 21:59 | 显示全部楼层
    能不能开发可以自建传感器测点的功能呢?还有数据库部分也没有。
  • TA的每日心情
    奋斗
    2015-10-30 10:45
  • 签到天数: 2 天

    [LV.1]初来乍到

     楼主| 发表于 2014-10-10 22:22 | 显示全部楼层
    chengts95 发表于 2014-10-10 21:59
    能不能开发可以自建传感器测点的功能呢?还有数据库部分也没有。

    这个没数据库~开发传感器测点也是可以的~api.php修改下就行,arduino对应传值即可
  • TA的每日心情
    郁闷
    2019-1-25 09:07
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2014-10-10 22:47 | 显示全部楼层
    某1o 发表于 2014-10-10 22:22
    这个没数据库~开发传感器测点也是可以的~api.php修改下就行,arduino对应传值即可 ...

    做成可配置的工作量很大,其实做物联网应用还可以用mqtt协议,比较方便。
  • TA的每日心情
    奋斗
    2015-10-30 10:45
  • 签到天数: 2 天

    [LV.1]初来乍到

     楼主| 发表于 2014-10-11 01:55 | 显示全部楼层
    chengts95 发表于 2014-10-10 22:47
    做成可配置的工作量很大,其实做物联网应用还可以用mqtt协议,比较方便。 ...

    过两天学习下安卓开发,,写个客户端出来,嘿嘿
  • TA的每日心情
    郁闷
    2019-1-25 09:07
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2014-10-11 15:36 | 显示全部楼层
    某1o 发表于 2014-10-11 01:55
    过两天学习下安卓开发,,写个客户端出来,嘿嘿

    试试mqtt吧,可以做后台推送

    该用户从未签到

    发表于 2014-12-14 17:31 | 显示全部楼层
    你好。能不能告诉我下,java代码怎么弄
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    《Color Unit免费申请试用》
    《Color Unit免费申请试用
    COLOR 是一款颜色识别 Unit,其内部集成TCS3472彩色光数字转换器,能够将其检测到颜色
    编译时空白行出现stray '\345' in program
    编译时空白行出现stray &#
    【原创】 drawbot平面关节scara机械臂写字机 画画机器人直播...
    【原创】 drawbot平面关节
    这个项目上个月就在做了,结构和代码反反复复改了多次,加上自己又太忙,一直没来得及
    siri+小爱+小度+天猫控制灯
    siri+小爱+小度+天猫控制
    以上是颜色代码 本程序控制的是8266的 io 0 默认上电LOW 有需求可以知己改写 siri
    siri控制8266
    siri控制8266
    //本程序是操作8266的GPIO 0 口// 程序如下 #include const char* ssid = "TP-11222";
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表