本帖最后由 rengaoadmin 于 2016-3-21 23:27 编辑
由于时间问题,本篇内容逐步更新,先把主要代码放出,陆续添加图片和注意事项.......
一 总体介绍
arduino端实物
IMG_0089.JPG (1.57 MB, 下载次数: 19)
2016-3-21 23:19 上传
微信端界面,监控菜单包括2个选项温度和湿度
IMG_6078.png (73.87 KB, 下载次数: 14)
2016-3-21 23:19 上传
控制菜单包括2个选项:开灯和关灯
IMG_6079.png (71.42 KB, 下载次数: 14)
2016-3-21 23:21 上传
第一个菜单为按钮,直接打开官网
IMG_6080.PNG (398.4 KB, 下载次数: 15)
2016-3-21 23:21 上传
下图是温度 /湿度/开灯/关灯所对应的结果显示
IMG_0082.png (144.25 KB, 下载次数: 17)
2016-3-21 23:26 上传
LCD_Base_bb_Fritz.png (241.57 KB, 下载次数: 17)
2016-3-21 23:26 上传
单独测试LCD时无所谓,LCD与W5100同时使用时,LCD不能再使用12,11脚,否则会出现乱码,改为9,8端口。
二 所需材料
三 用到的库文件
四 arduino端
[mw_shl_code=cpp,true]#include
#include
#include
dht11 DHT11;
#define DHT11PIN 6
LiquidCrystal lcd(9, 8, 5, 4, 3, 2);
//由于有W5100 pin 12,11 LCD不能使用
char state = '0';
char c;
int dht11state=0;
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress ip(192, 168, 31, 177);
EthernetClient client;
byte sheng[8] = {
0x04,0x14,0x1f,0x14,0x0e,0x04,0x1f,0x00
};
byte ri[8] = {
0x1f,0x11,0x11,0x1f,0x11,0x11,0x1f,0x00
};
byte kuai[8] = {
0x0a,0x0a,0x1f,0x1b,0x1f,0x0a,0x0d,0x00
};
byte le[8] = {
0x1e,0x10,0x14,0x1f,0x04,0x15,0x15,0x00
};
byte tanhao[8] = {
0x02,0x02,0x04,0x04,0x00,0x00,0x08,0x00
};
byte du[8] = {
0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00
};
byte xin[8] = {
0x00,0x0a,0x1f,0x1f,0x1f,0x0e,0x04,0x00
};
char server[] = "plclive.com";//设置为自己的服务器地址
int hum = 0;
int temp = 0;
unsigned long lastConnectionTime = 0;
boolean lastConnected = false;
const unsigned long postingInterval = 10*1000;
void setup(){
Serial.begin(9600);// 设置串口通信波特率
delay(1000);
Ethernet.begin(mac,ip);
Serial.print("My IP address: ");
Serial.println(Ethernet.localIP());
pinMode(7, OUTPUT); //设置第七个数字io为输出
pinMode(10, OUTPUT);
lcd.begin(16, 2);
lcd.clear();
lcd.createChar(0, sheng);
lcd.createChar(1, ri);
lcd.createChar(2, kuai);
lcd.createChar(3, le);
lcd.createChar(4, tanhao);
lcd.createChar(5, du);
lcd.createChar(6, xin);
}
void loop(void){
int chk = DHT11.read(DHT11PIN);
switch (chk)
{
case DHTLIB_OK:
dht11state=1;
break;
case DHTLIB_ERROR_CHECKSUM:
dht11state=2;
break;
case DHTLIB_ERROR_TIMEOUT:
dht11state=3;
break;
default:
dht11state=10;
break;
}
hum=(int)DHT11.humidity;
temp=(int)DHT11.temperature;
//显示温度湿度开始
lcd.setCursor(0, 0);
lcd.print("Temperatue:");
lcd.print(temp);
lcd.write(5);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Hum:");
lcd.print(hum);
lcd.print("%");
lcd.blink();
//显示温度湿度结束
//显示中文开始
lcd.setCursor(9, 1);
lcd.write(6);
lcd.write(byte(0));
lcd.write(1);
lcd.write(2);
lcd.write(3);
lcd.write(4);delay(100);
lcd.write(6);delay(200);
//显示中文结束
if(state == '0'){ //根据state的状态设置7脚的电平
digitalWrite(7, HIGH);
digitalWrite(10,LOW);
}else if(state == '1'){
digitalWrite(7, LOW);
digitalWrite(10,HIGH);
}
while(client.available()) {
c = client.read();
if (c == '{'){
state = client.read();
}
}
if (!client.connected() && lastConnected) {
Serial.println("disconnecting...");
client.stop();
}
if(!client.connected() && (millis() - lastConnectionTime > postingInterval)) {
if (client.connect(server, 80)) {
// send the HTTP PUT request:
client.print("GET http://www.plclive.com/api/downup.php?token=**********&data1=");
//*部分修改为你的token,向自己的服务器发送数据及更新token要与downup.php中设置的token一致,data1\data2\....\dataN根据传感器数量添加,
//并且要与downup.php里一致,同事数据库增加相应的记录值
client.print(temp);
client.print("&data2=");
client.print(hum);
client.println(" HTTP/1.1");
client.println("Host: www.plclive.com");
client.println("User-Agent: arduino-ethernet");
client.println("Connection: close");
client.println();
lastConnectionTime = millis();
}else {
Serial.println("connection failed");
Serial.println("disconnecting.");
client.stop();
}
}
lastConnected = client.connected();
}[/mw_shl_code]
五 web端,包括数据库和PHP页面两部分
六 微信端的设置和菜单的生成