|
本帖最后由 weijinhe 于 2014-4-14 16:56 编辑
Arduino测试温湿度
案例:http://machtalk.net/intro/arduinowifi 可以看到图
(一)准备
进行本教程需要准备以下硬件:
1.Arduino uno:是一个开放源代码的单芯片微电脑。
2.LM35线性温度传感器:LM35是一种得到广泛使用的温度传感器。
3.DHT22温湿度传感器:DHT22数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。
4.环境光线传感器:
5.zigbee扩展板:ZigBee模块是一种物联网无线数据终端,利用ZigBee网络为用户提供无线数据传输功能。
6.wifi模块:Wifi模块为串口或TTL电平转WIFI通信的一种传输转换产品。
1、Wifi扩展板与Arduino uno相连,LM35三个引脚分别与Arduino 5v GND A0相连。 2、DHT22分别与Arduino 5V GND 数字口7相连。 3、环境光照传感器分别与Arduino 5v GND A1口相连
硬件连接图如下图所示:
(二)编写代码
从arduino官网下载的编辑器http://arduino.cc/en/Main/Software,打开编辑器,输入如下内容:
#include <DHT22.h>
#define DHT22_PIN 7
DHT22 myDHT22(DHT22_PIN);
void setup() {
Serial.begin(115200);
pinMode(13,OUTPUT);
}
int time=0;
void loop() {
time=time+1;
DHT22_ERROR_t errorCode;
delay(2000);
//Serial.print("Requesting data...");
errorCode = myDHT22.readData();
switch(errorCode)
{
case DHT_ERROR_NONE:
//Serial.print("Got Data ");
//Serial.print(myDHT22.getTemperatureC());
//Serial.print("C ");
//Serial.print(myDHT22.getHumidity());
//Serial.println("%");
char buf[128];
sprintf(buf, "Integer-only reading: Temperature %hi.%01hi C, Humidity %i.%01i %% RH",
myDHT22.getTemperatureCInt()/10, abs(myDHT22.getTemperatureCInt()%10),
myDHT22.getHumidityInt()/10, myDHT22.getHumidityInt()%10);
//Serial.println(buf);
break;
}
if (time%5==1)
{
digitalWrite(13,HIGH);
Serial.print("POST /v1.0/device/a030c5e8c64f4bcc90b5fc5788bc8bea/1/1/datapoints/add");
//“/device/4290/sensor/9970/”device,sensor 后面的数值用你自己的替代
Serial.print("?params={\"value\":");
Serial.print(myDHT22.getTemperatureC());
Serial.println("}&APIKey=7a19bd7874a541a6b4c50a831ea0b3b2");
Serial.println("Host: api.machtalk.net");
Serial.print("Accept: *");
Serial.print("/");
Serial.println("*");
Serial.println("Content-Length: 0");
Serial.println("Content-Type: application/x-www-form-urlencoded");
Serial.println("Connection: close");
Serial.println();
digitalWrite(13,LOW);
}
else if (time%5==2)
{
digitalWrite(13,HIGH);
Serial.print("POST /v1.0/device/6757fe9defd34dfb989e65c4612b69c3/1/1/datapoints/add");
//“/device/4290/sensor/9970/”device,sensor 后面的数值用你自己的替代
Serial.print("?params={\"value\":");
Serial.print(myDHT22.getTemperatureC());
Serial.println("}&APIKey=5ac5c823b3914ca8a71c866e33904775");
Serial.println("Host: api.machtalk.net");
Serial.print("Accept: *");
Serial.print("/");
Serial.println("*");
Serial.println("Content-Length: 0");
Serial.println("Content-Type: application/x-www-form-urlencoded");
Serial.println("Connection: close");
Serial.println();
digitalWrite(13,LOW);
}
else if (time%5==3)
{
digitalWrite(13,HIGH);
Serial.print("POST /v1.0/device/a030c5e8c64f4bcc90b5fc5788bc8bea/2/1/datapoints/add");
//“/device/4290/sensor/9970/”device,sensor 后面的数值用你自己的替代
Serial.print("?params={\"value\":");
Serial.print(myDHT22.getHumidity());
Serial.println("}&APIKey=7a19bd7874a541a6b4c50a831ea0b3b2");
Serial.println("Host: api.machtalk.net");
Serial.print("Accept: *");
Serial.print("/");
Serial.println("*");
Serial.println("Content-Length: 0");
Serial.println("Content-Type: application/x-www-form-urlencoded");
Serial.println("Connection: close");
Serial.println();
digitalWrite(13,LOW);
}
else if (time%5==4)
{
int sensorValue;
int dat = analogRead(A1);
sensorValue=(125*dat)>>8;
digitalWrite(13,HIGH);
//Serial.println(sensorValue, DEC);
Serial.print("POST /v1.0/device/fd762ad38c17469390d0c3354ef74108/1/1/datapoints/add");
//“/device/4290/sensor/9970/”device,sensor 后面的数值用你自己的替代
Serial.print("?params={\"value\":");
Serial.print(sensorValue);
Serial.println("}&APIKey=7a19bd7874a541a6b4c50a831ea0b3b2");
Serial.println("Host: api.machtalk.net");
Serial.print("Accept: *");
Serial.print("/");
Serial.println("*");
Serial.println("Content-Length: 0");
Serial.println("Content-Type: application/x-www-form-urlencoded");
Serial.println("Connection: close");
Serial.println();
digitalWrite(13,LOW);
}
else if(time%5==0)
{
int Value;
int dat = analogRead(A0);
//Value=(125*dat)>>8;
Value = (dat*0.0048828125*100);
digitalWrite(13,HIGH);
//Serial.println(sensorValue, DEC);
Serial.print("POST /v1.0/device/93789ec42bda44b49bcc6355f89444f4/1/1/datapoints/add");
//“/device/4290/sensor/9970/”device,sensor 后面的数值用你自己的替代
Serial.print("?params={\"value\":");
Serial.print(Value);
Serial.println("}&APIKey=7a19bd7874a541a6b4c50a831ea0b3b2");
Serial.println("Host: api.machtalk.net");
Serial.print("Accept: *");
Serial.print("/");
Serial.println("*");
Serial.println("Content-Length: 0");
Serial.println("Content-Type: application/x-www-form-urlencoded");
Serial.println("Connection: close");
Serial.println();
digitalWrite(13,LOW);
}
delay (9000);
}
int getLength(int someValue) {
// there's at least one byte:
int digits = 1;
// continually divide the value by ten,
// adding one to the digit count for each
// time you divide, until you're at 0:
int dividend = someValue /10;
while (dividend > 0) {
dividend = dividend /10;
digits++;
}
// return the number of digits:
return digits;
}
选择正确的版本和端口后,将程序写入arduino uno,详细操作请求助互联网。
(三)平台配置
在MachTalk上注册用户,登录后进入“设备”模块,创建一个LM35设备,添加一个数值型的设备值。如下图:
给这个设备添加一个触发器:
按以上步骤即完成LM35设备的创建,重复以上步骤,完成DHT22设备、光照强度设备的创建。
具体的请参考教程http://machtalk.net/intro/book
对wifi进行配置,首先恢复出厂值。 按住底板上的任一按钮超过6秒钟, 等待启动(约30 秒)。启动后,用电脑的WiFi扫描空间里的WiFi信号,加入WiFi,密码为 12345678。
在浏览器里输入192.168.16.254, 会弹出输入用户名和密码的对话框。 用户名和密码都是admin。
登陆后有如下界面: 把wifi模块设置成客户端模式。
(四)观察数据
等待一段时间,点击设备页面上的“查看数据”可以查看历史数据:
LM35数据图如下:
环境光照数据展示:
DHT22温湿度数据展示:
(五)监控报警
当上传的值达到预定的告警值时会触发指定的动作,本例中是当CPU温度大于45度时发送邮件:
www.machtalk.net 物联网交流群:300250166
|
|