大家好,
我正在为我所在地区的一些 hoophouse 蔬菜种植者做实习项目。他们有兴趣安装一个温度警报,让他们知道 hoophouse 何时变得太热或太冷,他们的 hoophouse 不在 wifi 和蓝牙范围内,他们希望在线查看数据并将温度警报发送到他们的
手机以及。我的经验非常有限,但我想尝试去做。
我决定使用无线电发射器,因为 hoophouses 离房子不是很近。总体计划是将温度传感器(AHT20,但可能会切换到 SHT-30)连接到 Arduino Uno 和 RFM69HCW 无线电发射器,以将温度传输到房屋中的另一个 RFM69HCW,也连接到 arduino uno。当温度过低或过高时,压电蜂鸣器和红色 LED 会熄灭。
现在以上所有的都在工作。温度通过无线电传输,显示在房屋的液晶显示器上,如果太热或太冷,警报就会响起。(下面附上的代码是 wifi 问题的测试器,未附上当前的工作代码)。
我还想将此信息发送到 Thingspeak,以便可以跟踪数据,而且我还希望在人们的 hoophouse 过热或过冷时向他们的手机发送 SMS 警报。
我从 Adafruit 购买了一块 ESP8266 Huzzah
开发板,认为它适合 wifi 连接,并且可以连接到家里的 Arduino Uno(如果需要,我也有 FTDI 电缆)。Adafruit HUZZAH ESP8266 Breakout:ID 2471:9.95 美元:Adafruit Industries,独特有趣的 DIY
电子产品和套件
目前 Huzzah ESP8266 未连接到互联网。我的代码卡在“重新连接”上。发生这种情况时,ESP8266 上没有灯(蓝色或红色)。不过,Arduino UNO 上的 TX 和 RX 灯会熄灭。
我之前试着玩过 FTDI 和另一个程序,当我这样做时,ESP8266 上的蓝色和红色灯熄灭了。此外,我就在路由器旁边,我知道互联网运行良好,密码和 wifi 名称正确,路由器为 5 GHz,我读过的 ESP8266 是正确的。
我听说 arduino 接受命令,可能不会将其转发给 ESP8266,我认为这是我的问题,但我不确定如何解决。在较早的
论坛帖子中,有人说移除 Uno 的 MCU,但我相信这会搞乱我的其他操作。
这就是我无法连接到 Wifi 的原因,是否有解决方法?
上传照片有问题,见附件)
注意:Huzzah ESP8266 有一个稳压器,所以我可以将 V+ 连接到 5V,而 Rx 是 5V 兼容的。我也试过 TX-RX,RX-TX。
根据另一个论坛上的建议,我还尝试将 Tx 和 Rx 连接到不同的数字引脚(6 和 7,因为 RFM68HCW 无线电发射器正在使用 2 和 3)。这导致了同样的“重新连接”问题。
Uno: --- ESP8266:
TX --- TX
Rx --- RX
5V --- V+
3.3V --- EN, RST
GND --- GND
注意:此代码仅用于测试 wifi 和连接与 Thingspeak。
我从这里获取了原始代码:ThingSpeak Arduino Weather Sta
tion - Arduino 项目中心,我没有将他们的 DHT 传感器代码切换到我的,以及其他一些东西,不过应该不会太难。我只需要先解决 wifi 问题。
代码:
全选Serial.print(" nnn ");
Serial.begin(9600); //Start with baud 9600
ESP8266.begin(9600);
dht.begin();
startTime = millis();
ESP8266.println("AT+RST");
delay(2000);
Serial.println("Connecting to Wifi");
while(check_connection==0)
{
Serial.print(".");
ESP8266.print("AT+CWJAP=\"*******\",\"*************\"\r\n");
ESP8266.setTimeout(5000);
if(ESP8266.find("WIFI CONNECTED\r\n")==1)
{
Serial.println("WIFI CONNECTED");
break;
}
times_check++;
if(times_check>3)
{
times_check=0;
Serial.println("Trying to Reconnect..");
}
}
}
void loop()
{
waitTime = millis()-startTime;
if (waitTime > (writingTimer*1000))
{
// readSensors();
writeThingSpeak();
startTime = millis();
}
}
//void readSensors(void)
//{
//temp_f = dht.readTemperature();
//humidity = dht.readHumidity();
// temp_f = temp.temperature();
//humidity = humidity.relative_humidity();
//}
void writeThingSpeak(void)
{
float temp = 5; //faking sensor data to test wifi
float humid = 6; //faking sensor data to test wifi
startThingSpeakCmd();
// preparacao da string GET
String getStr = "GET /update?api_key=";
getStr += myAPIkey;
getStr +="&field1=";
getStr += String(temp);
getStr +="&field2=";
getStr += String(humid);
getStr += "\r\n\r\n";
GetThingspeakcmd(getStr);
}
void startThingSpeakCmd(void)
{
ESP8266.flush();
String cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += "184.106.153.149"; // api.thingspeak.com IP address
cmd += "\",80";
ESP8266.println(cmd);
Serial.print("Start Commands: ");
Serial.println(cmd);
if(ESP8266.find("Error"))
{
Serial.println("AT+CIPSTART error");
return;
}
}
String GetThingspeakcmd(String getStr)
{
String cmd = "AT+CIPSEND=";
cmd += String(getStr.length());
ESP8266.println(cmd);
Serial.println(cmd);
if(ESP8266.find(">"))
{
ESP8266.print(getStr);
Serial.println(getStr);
delay(500);
String messageBody = "";
while (ESP8266.available())
{
String line = ESP8266.readStringUntil('\n');
if (line.length() == 1)
{
messageBody = ESP8266.readStringUntil('\n');
}
}
Serial.print("MessageBody received: ");
Serial.println(messageBody);
return messageBody;
}
else
{
ESP8266.println("AT+CIPCLOSE");
Serial.println("AT+CIPCLOSE");
}
}
代码:
全选12:55:21.090 -> ⸮ Connecting to Wifi
12:55:24.654 -> ....Trying to Reconnect..
12:55:44.774 -> ....Trying to Reconnect..
12:56:04.923 -> ....Trying to Reconnect..
12:56:25.087 -> ....Trying to Reconnect..
12:56:45.223 -> .