w510086 发表于 2016-11-20 11:33:52

仓储物联网监控项目分享

    作为蘑粉很荣幸参加了英特尔的物联网创客竞赛—,参加了蘑菇云4次培训,决定做仓储物联网项目,这里要感谢蘑菇云的大力支持,给我们培训,提供套件还有场地,无偿的帮助很感动!特别感谢其中的一个帅哥老师,问了一百多人只有他手里有打火机,每次从他那里找到打火机(测试火焰)的那种幸福感是难以言表的!整个文章前面讲场地后面讲我们做的东西,文字上比较活跃,由于我们都是做软件的,所以不能像其他创客那样有很多操作步骤上的讲解,更多的是给大家讲系统实现的方法。敬请担待:handshake!废话不多说,直接上图!让没去的蘑粉也感受下现场的热烈氛围!比赛场地一角



旁边这桌也做的热火朝天,感谢他们带了一款众筹产品给我们试用。



这个应该是某个大学的学生,一看就是朝气蓬勃,看到他们才感觉到我们真的老了,真的老了:(。



这桌现场修理电磁炉,带着锅准备做饭,知道为什么吗?因为中午的饭分量太少,把我们这群IT狗饿得受不了了:lol!(这里我扯的),他们应该做的智能电器,能看得出来做的很用心。



做android端的哥们,帅的一塌糊涂。哥们特意给我说过,上传的他的照片要打马赛克,一定要打马赛克!我按他说的做了;P!



我怕你们看到我之后就得我队友不帅,所以就只上传有蘑菇云定制版联想笔记本。



上面讲了那么多热烈的画面,接下来给大家讲点降温的东西。


好了!接下来讲讲我们做的东西,其实很简单了!真的很简单!我都不好意思讲了!此处省略一百句谦虚。。。。。。。我们的做这个的想法来源于XX港的xx事件。
从官方的报道发现了这两个让我这个吃瓜群众觉得不可思议的地方
—1.消防队员到了之后无法得知堆场集装箱装载货物种类
—2.仓储区特殊货物对环境有比较高的要求,居然没有相关调控措施


做为IT吃瓜群众,我们几个是很难接受这个现实的,抄起家伙就干:victory:。设计了仓储物联网监控系统,下面是框架


用intel的物联网模块Edison作为HUB,此处再次感谢蘑菇云的场地套件培训,由于接线比较多,拍照看起来比较凌乱,下面的接线图就截的老师的此处感谢乔老师的无私奉献,吃瓜群众再次拜谢:$!偷拍乔老师的画面,超级敬业啊!






接线图









功能实现:
1.HUB每20S上传一次温度,湿度,火警状态到服务器,手机端定时访问服务器获取信息并显示。
2.当温度,湿度,大于设定的阀值手机端和PC端都会发出报警提示音。
3.当火警状态时,手机端和PC会报警。HUB端会发出声光报警,工作人员查看没有火警情况下,按下复位键系统复位,继续监控场地信息,火警状态下,上传数据频率为1S/次。

各位大神原谅我吧!表达能力不行,程序上传共享,大神们看一眼就知道怎么回事。
首先上PC端登陆界面,输入用户名密码






进入设备信息列表



点击查看可以查看温湿度历史记录,各个时间点的,我觉得我哥们做的挺漂亮,我这哥们没女朋友,这里我给他发个征婚启示,张江IT男,憨厚老实,吃苦耐劳,居家过日子必备,好了又扯远了。下面是历史记录截图。




重点讲下通信协议:
Edison上传传感器数据到服务器我们用的HTTP协议GET方法,具体实现如下
void httpRequest() {
// close any connection before send a new request.
// This will free the socket on the WiFi shield
lastConnectionTime = millis();
client.stop();
Serial.println("connecting...");
// if there's a successful connection:
if (client.connect(server, 80)) {
    Serial.println("connected");
    client.println("GET /eservice/device.action?&action=saveDevRecord&sign=WlwebByRebel&devCode=" +String(devId) + "&temperature=" + String(temperature) + "&humidity=" + String(humidityValue) + "&fireStatus=" + String(fireStatus) + " HTTP/1.1");
    client.println("Host:xxx.xxx.xxx.163");
    client.println();
if (client.available()) {
    char c = client.read();
    Serial.println();
    Serial.println(c);
    Serial.println();   
}
// Serial.println("GET /eservice/device.action?&action=saveDevRecord&sign=WlwebByRebel&devCode=" +String(devId) + "&temperature=" + String(temperature) + "&humidity=" + String(humidityValue) + "&fireStatus=" + String(fireStatus) + " HTTP/1.1");
   client.stop();
} else {
    // if you couldn't make a connection:
    Serial.println("connection failed");
}
}上面这段代码主要实现HTTP的GET方法,上传了温度,湿度,火警状态,设备编号信息。上传信息的接口要和做服务器的协商好,按照要求上传信息即可,如果不是团队做可以用第三方IOT服务器,像中国移动的OneNET按照预定协议格式上传而且还有APK模版,基本都是拿来修修改改就能用的。
void fireWaring() {
int i = 1;
int ledNum = 0;
int keyFlag = 0;
int sensorValue = analogRead(0);//火焰传感器连到模拟口,并从模拟口读值
//Serial.println(sensorValue);
delay(1);

    if(sensorValue > 500){ //如果数大于500,说明有火源,蜂鸣器响 这里的设定值根据实际情况赋值
      fireStatus = 1;
      while(fireStatus == 1){
            //fireStatus = 1;
            for(int x=0; x<180; x++){
            //将 sin函数角度转化为弧度
            sinVal = (sin(x*(3.1412/180)));
            //用 sin函数值产生声音的频率
            toneVal = 2000+(int(sinVal*1000));
            //给引脚 8一个
            tone(8, toneVal);
            delay(15);
            buttonState = digitalRead(buttonPin); //读取按键引脚的状态值
            Serial.println("w5   "+ String(buttonState));
            // 检测按键是否按下,如果是的话,按键状态值为 HIGH
            if (buttonState == HIGH) {      
//                digitalWrite(ledPin, LOW);// 打开 LED
//                noTone(8);          //关闭蜂鸣器
//                fireStatus = 0;
                  keyFlag = 1;
                  break;
            }
            }
            if(ledNum > 100){
            digitalWrite(ledPin, ~i);   // 关闭 LED
               ledNum=0;
            }else{
            ledNum++;
            }
            
            if(keyFlag == 1)
            {
            digitalWrite(ledPin, LOW);// 打开 LED
            noTone(8);          //关闭蜂鸣器               
            fireStatus = 0;
            keyFlag = 0;
            break;
             }
             if(millis() - lastConnectionTime > 2000) {
            //lastConnectionTime = millis();
            httpRequest();
            //Serial.println(Mystring);
            }
      }   
    } else {    // 如果数据小于等于500,没有火源,关闭蜂鸣器
         noTone(8);          //关闭蜂鸣器
    }
}
上面这段代码当时难住我的地方是满足判断条件后蜂鸣器一直不响,后来尝试加大延长时间到15ms问题就解决了。

下面这段是主函数逻辑部分,大部分都注释了,其实整个逻辑很简单。
void loop() {
char bufferChar;
char bufferChar1;
static unsigned long readSensorTimer=0;
fireWaring();
if(millis()-readSensorTimer>300)
{
    readSensorTimer=millis();
    temperatureValue=analogRead(TemperaturePin);    //读取温度的模拟量
    humidityValue=analogRead(HumidityPin);          //读取湿度的模拟量

    temperature=(500 * temperatureValue) /1024;   //通过模拟量计算出实际温度
    Serial.print("humidityValue: ");
    Serial.println(humidityValue);
    Serial.print("temperature: ");
    Serial.println(temperature);
    //LCD显示当前温度
    lcd.setCursor(0, 0);    //光标移到第一行,第一个字符
    lcd.print("T:");
    lcd.print(temperature);
    lcd.print("C");
    lcd.print(" ");

    //LCD现实当前湿度
    lcd.setCursor(6, 0);    //光标移动到第一行,第七个字符
    lcd.print("H:");
    //lcd.print("");
    lcd.print(humidityValue);
    if(humidityValue < 99)
    lcd.print("");//如果humidityValue大于99,下一次输出的数据小于100的话就会造成LCD上显示的数字不正确,所以有效数字后做了清空处理

    //显示当前土壤情况
    lcd.setCursor(0, 1);    //光标移动到第二行,第一个字符
    if (humidityValue<300) {
      lcd.print("Soil: Dry");
    }
    else if (humidityValue>=300 && humidityValue<700){
      lcd.print("Soil: Humid");
    }
    else{
      lcd.print("Soil: Water");
    }
}
// if you're not connected, and ten seconds have passed since
if(millis() - lastConnectionTime > postingInterval) {
      //lastConnectionTime = millis();
      httpRequest();
      //Serial.println(Mystring);
}


}


关于服务器不很我也不是很懂,以前自己做的是按照这个搭建的,链接如下
ubuntu下搭建服务器
大家可以看下,不过还是比较推荐个人创客用大公司的开发接口,这样开发难度会小一点,附上中国移动OneNET链接供参考中国移动OneNET

到此为止简单讲了我们做的东西,面太广,太杂了,讲的也没什么深度,请各位见谅!:handshake:handshake:handshake:handshake:handshake:handshake:handshake


蘑菇云物联特工队 @Ash

















hnyzcj 发表于 2016-11-20 11:56:28

8 错

吹口琴的钢铁侠 发表于 2016-11-20 13:32:35

你们做得好快,,这么快就上传教程了。。

Ash 发表于 2016-11-21 16:17:41

记录得好详细~ 还不忘征婚 哈哈Hi,当时登记的团队成员名字可以给我一下吗?
页: [1]
查看完整版本: 仓储物联网监控项目分享