一个网络化的温度传感器实现(Arduino)

本例基于Arduino Uno

使用器件:ESP8266,LM35,LCD1602,IR LED,红外接收器

出现问题:

    1. ESP8266连接网络较慢;

    2.arduino在115200波特率下串口通信乱码异常严重(已解决);

    3.LM35模拟信号容易受到干扰;

应注意问题:

    1.如果对LM35进行输入检查那么容错率大有改善;

    2.ESP8266连接网络应该给出较大delay(),给其充足时间反应;

    3.Arduino的C++库不完整,请自行解决;

    4.本人代码没有封装,可能读起来比较困难

#include 

#include "SoftwareSerial.h"
#include "stdlib.h"
#include   

int reading;
String val1;
String cmd;
int ReadTemp;
char OutTemp[10];

int count = 0;
int foundon;
int foundoff;

const String host = "http://wechatmaster.cn";
const String url = "/temp";

SoftwareSerial mySerial(12,13);//Set Soft Serial.  12: RX  13: TX

IRrecv irrecv(8);  
decode_results results;  
IRsend irsend;       
LiquidCrystal lcd(11, 10, 7, 6, 5, 4);

void ReadSerialInfor()
{
  val1 = "";
  while(mySerial.available())
  {
    val1+=char(mySerial.read());
    delay(5);
  }
  Serial.println(val1);
}


int SendTemperature(int temp)
{
  if (temp>=0&&temp<10)
  {  
    mySerial.println("AT+CIPSEND=5");
    delay(100);
    mySerial.print("LM35");
    mySerial.println(itoa(temp,OutTemp,10));
    delay(100);
    Serial.println("sent");
    return 0;
  } 

  else if ((temp>=10&&temp<100)||(temp<0&&temp>-10))
  {  
    mySerial.println("AT+CIPSEND=6");
    delay(100);
    mySerial.print("LM35");
    mySerial.println(itoa(temp,OutTemp,10));
    delay(100);
    Serial.println("sent");
    return 0;
  }

  else if (temp>=100||temp<=-10)
  {  
    mySerial.println("AT+CIPSEND=7");
    delay(100);
    mySerial.print("LM35");
    mySerial.println(itoa(temp,OutTemp,10));
    delay(100);
    Serial.println("sent");
    return 0;
  }

}


void LcdPrint(int Temp)
{
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Temperature:");
  lcd.print(itoa(Temp,OutTemp,10));
  lcd.setCursor(0, 1);
  lcd.print("Condition:");
  if((foundon == 1)&&(foundoff == 0)) lcd.print("ON");
  else if((foundoff == 1)&&(foundon == 0)) lcd.print("OFF");
  else lcd.print("NOCMD");
}


void GetCmd()
{
  cmd = "";
  while(mySerial.available())
  {
    cmd+= char(mySerial.read());
    delay(10);
  }
  Serial.println(cmd);
}

int FindONString(String Str)
{
  int i;
  for(i=0;i

*服务器端和用户端由另外的同学负责,不要问我要代码;

*如果有余力应当将TCP传输改为http传输,ESP8266可以模拟http协议;

*因为隐私问题(路由器密码是我的名字。。。),WiFiSetup()函数没有给出;


欢迎交流相关经验

你可能感兴趣的:(单片机)