Robofun 機器人論壇

標題: 新手詢問,請問如何讓arduino 觸發感測後前往到某個網址? [打印本頁]

作者: jarrys2    時間: 2018-6-6 21:29
標題: 新手詢問,請問如何讓arduino 觸發感測後前往到某個網址?
各位高手請問一下,我目前有作好可以連arduino的ip 在網頁上 看到溫度值,

那要怎麼作才能讓arduino 自動導向到某個網址呢


例如溫度到32度後導向到http://xxx.xxx.xxx.xxx   


作者: 超新手    時間: 2018-6-6 21:57
本帖最後由 超新手 於 2018-6-7 09:30 編輯

先讓你的網頁有自動更新功能,在 <head> </head>間
加上
<meta http-equiv='refresh' content='10'/>
表示每 10 秒自動更新網頁
一旦超過温度, 就把上面那行,改成
<meta http-equiv='refresh' content='0; url=http://xxx.xxx.xxx.xxx'>
應該就可以了
作者: jarrys2    時間: 2018-6-7 22:27
感謝回應~
請教一下,能自動觸發嗎,不用找一台電腦開流覽器去瀏覽
作者: 超新手    時間: 2018-6-8 06:57
你的問題有點奇怪?
如果沒有人開瀏覽器,
Arduino 自動導向網址根本沒意義了吧?
因為有人看這個網頁,但因為温度高,所以
Arduino 把網頁導向另一個網址
如果沒人監看這個網頁,那就沒有導向網址這件事
我猜你應該沒把問題講清楚吧?
不知道你的需求是..
1.只要曾經温度過高,就要轉址
還是
2.監控過程中,温度過高就轉址


作者: jarrys2    時間: 2018-6-8 13:42
不好意思,沒有說很明白我是要
1.只要曾經温度過高,就要轉址

可否再請教一個問題,我有照您說的在網頁自動更新的能是有成功,那可加上變數嗎,因為想把變數帶到下一個頁面裡 但不管我用什麼方式串,他檢查時都說語法錯誤
  if(pos) {
      
      int val = DHT11.read(DHT11PIN);

int sss;

sss = micVal;

    BufferFiller bfill = ether.tcpOffset();

    bfill.emit_p(PSTR("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\nPragma: no-cache\r\n\r\n"));


    if(sss>26){

    bfill.emit_p(PSTR(" <meta http-equiv='refresh' content='5; url=http://111.111.111.111?ID=變數>"));

    }else{
   
     bfill.emit_p(PSTR(" <meta http-equiv='refresh' content='5; url=http://222.222.222.222>"));   

     }

     bfill.emit_p(PSTR("<p><h1>感測值</h1></p> "));
    bfill.emit_p(PSTR("<p><h2>等於: </h2></p> "));  

    bfill.emit_p(PSTR("$D\n"), sss);  
   
    ether.httpServerReply(bfill.position());
  }

作者: jarrys2    時間: 2018-6-8 13:45
我試過以下都不行

bfill.emit_p(PSTR(" <meta http-equiv='refresh' content='5; url=http://111.111.111.111?ID='".sss."'>"));
bfill.emit_p(PSTR(" <meta http-equiv='refresh' content='5; url=http://111.111.111.111?ID='"&sss&"'>"));
bfill.emit_p(PSTR(" <meta http-equiv='refresh' content='5; url=http://111.111.111.111?ID='"+sss+"'>"));
作者: 超新手    時間: 2018-6-8 14:33
本帖最後由 超新手 於 2018-6-8 14:43 編輯

1) 少了引號(紅色)
bfill.emit_p(PSTR(" <meta http-equiv='refresh' content='5; url=http://111.111.111.111?ID=變數'>"));
bfill.emit_p(PSTR(" <meta http-equiv='refresh' content='5; url=http://222.222.222.222'>"));   
2. 這個要包在 <head> </head> 間
從你貼的程式看不到 <html> <head> 這些東西
大致要像這樣
<html>
<head>
<meta http-equiv='refresh' content='5;url=http://222.222.222.222'>
</head>
<body>
<p><h1>感測值</h1></p>
省略......
</body>
</html>


作者: 超新手    時間: 2018-6-8 19:54
另外,關於 emit_p(PSTR(" "));
如果要印出雙引號裡面的東西
要注意的是,裡面不能有雙引號
emit_p(PSTR("   "   "));這樣寫是錯的
如果要印出雙引號等特殊字元
就必須加上 \
也就是
emit_p(PSTR(" \"  "));

作者: jarrys2    時間: 2018-6-8 23:35
不好意思請問
int name= 5;
bfill.emit_p(PSTR(" <meta http-equiv='refresh' content='5; url=http://111.111.111.111?ID=name>"));

我在下一頁的網址列是出現
http://111.111.111.111?ID=name

請問要怎麼把這變數帶到下一頁呢希望呈現如下
http://111.111.111.111?ID=5

作者: 超新手    時間: 2018-6-9 02:45
本帖最後由 超新手 於 2018-6-11 10:23 編輯

你會顯示温度,怎麼會不知道怎麼用?
和顯示温度相同方法
bfill.emit_p(PSTR("$D\n"), sss);  
也就是
bfill.emit_p(PSTR("<meta http-equiv='refresh' content='5; url=http://111.111.111.111?ID=$D'>"),name);
注意!你又忘記在 > 的前面, 加一個單引號. 注意!
如果是整數,就用 $D,
如果是字串,就用 $S........
作者: jarrys2    時間: 2018-6-11 17:09
非常感謝你耐心的回覆

可以了,謝謝




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2