OK,今天要来说说Code的部分,上一篇我们把资料储存在Google Sheet中,那今天就是程序码的解说,这次程序码的loop就使用到非常少,因为此次程序利用到方法。
这个技巧在许多城市中都很常遇见,这大幅减少主程序的程序码,而变成在需要用到时再去使用,类似於函式,下面会开始讲解上次的程序码。
void loop() {
initWifi();
makeIFTTTRequest();
//delay(20000); //Send Time
// enable timer deep sleep
esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
Serial.println("Going to sleep now");
// start deep sleep for 3600 seconds (60 minutes)
esp_deep_sleep_start();
}
是否有看见在第32、33、36行,都写上一段程序,但如果你跑去网路上查询此段意思可能查无结果,因为该段程序码就写在程序里面,只是透过这几行去呼叫而已,举例第32行执行後,程序会接续去呼叫第43行的initWifi(),那当initWifi()这区块程序跑完。就又会回到loop中接续执行第33行,然後就持续接续下去。
void initWifi() {
Serial.print("Connecting to: ");
Serial.print(ssid);
WiFi.begin(ssid, password);
int timeout = 10 * 4; // 10 seconds
while(WiFi.status() != WL_CONNECTED && (timeout-- > 0)) {
delay(250);
Serial.print(".");
}
Serial.println("");
if(WiFi.status() != WL_CONNECTED) {
Serial.println("Failed to connect, going back to sleep");
}
Serial.print("WiFi connected in: ");
Serial.print(millis());
Serial.print(", IP address: ");
Serial.println(WiFi.localIP());
}
// Make an HTTP request to the IFTTT web service
void makeIFTTTRequest() {
Serial.print("Connecting to ");
Serial.print(server);
WiFiClient client;
int retries = 5;
while(!!!client.connect(server, 80) && (retries-- > 0)) {
Serial.print(".");
}
Serial.println();
if(!!!client.connected()) {
Serial.println("Failed to connect...");
}
Serial.print("Request resource: ");
Serial.println(resource);
// Temperature in Celsius
String jsonObject = String("{\"value1\":\"") + myAHT10.readTemperature() + "\",\"value2\":\"" + myAHT10.readHumidity() + "\"}";
client.println(String("POST ") + resource + " HTTP/1.1");
client.println(String("Host: ") + server);
client.println("Connection: close\r\nContent-Type: application/json");
client.print("Content-Length: ");
client.println(jsonObject.length());
client.println();
client.println(jsonObject);
int timeout = 5 * 10; // 5 seconds
while(!!!client.available() && (timeout-- > 0)){
delay(100);
}
if(!!!client.available()) {
Serial.println("No response...");
}
while(client.available()){
Serial.write(client.read());
}
Serial.println("\nclosing connection");
client.stop();
}
像这种前面有加void xxx()的这种,代表进入到这方法时只单纯计算,却不会回传数值,而如果遇到前面加型别那救世会回传数值。
例如
int test(int x){
return x+10;
}
void loop(){
int x = 10;
Serial.print(test(x));
}
当程序跑到第6行要输出时,会先跑test()这方法,而经过test()这方法後return(回传)会把x+10在回传回来,那除了上述写法还有一种写法。
int test(int x){
return x+10;
}
void loop(){
int x = 10;
x = test(x);
Serial.print(x);
}
像上面这例子,会到第6行进test()方法中在回传x+10的数值,在透过第7行输出,那这两种都可以使用,只是各位需要记得,当方法有回传值时,需要拿变数接收或输出。
好了,因为此次程序码中运用到许多方法的写法,所以各位可能都不懂,所以就在这最後的教学又做一点科普,在上一篇的程序码当中因为大部分也都跟前几篇的传输大同小异,都是对函式库中的函式做运用,运用的当可以做出更创新的用途,所以希望大家往後可以持续研究且继续进步,开创出自己的小天地。明天是本次系列的最终章,就用结语来做个圆满的THE END吧!!
【前言】 本系列为个人前端学习之路的学习笔记,在过往的学习过程中累积了很多笔记,如今想藉着IT邦帮忙...
今天来总结一下该如何将档案从本地数据库 push 到 GitHub 上,写个简单的懒人包,也算再复习...
延续昨天没做完的议题,今天来把 js & html 补完,让变成一个完整的 Dapp 首先 ...
大家新年快乐!上一篇完成後还剩下这些功能: 可以一次删除全部的代办事项 能删除所有已完成的代办事项的...
今天的影片内容为介绍在Python中常用来储存资料的形式,分别是串列(list)、元祖(tuple)...