<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> STM32 >> 瀏覽文章

        Rainbow web服務器:通過瀏覽器查看溫度和濕度

        作者:白櫟旸   來源:本站原創   點擊數:  更新時間:2014年04月30日   【字體:

          Rainbow開發包中有關于HTTP服務器的封裝,使得我們可以通過簡單的代碼實現在瀏覽器中進行一些參數配置、信息的輸出。Rainbow有了Web接入能力,數據的展示、輸入的接收都可以通過瀏覽器進行,這就為Rainbow物聯網的開發提供了必要條件。

         
            本文是一個最簡單的Web應用,當我們訪問指定url的時候,Rainbow會向瀏覽器輸出當前的溫度濕度,假定我們在程序中給Rainbow設定的ip是192.168.1.15,在瀏覽器的地址欄輸入http://192.168.1.15/demo.cgi,將會在瀏覽器中看到下面的結果:
         
            
            在軟件包的“Projects\Web-Simple”文件夾包含了本文的完整工程,可以直接編譯、燒寫和調試。來看看main.cpp的代碼:
        #include "WProgram.h"
        #include "WebServer.h"
        #include "Ethernet.h"
        #include "Dht11.h"
         
        //網絡模塊的MAC地址
        byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
        //網絡模塊的IP地址
        IPAddress ip(192, 168, 1, 15);
         
        //web服務器監聽80端口
        WebServer server(80);
         
        //定義Dht11對象
        Dht11 dht11(DHT11_DATA_PIN);
         
        //處理所有的get類型的HTTP請求
        void httpGet(HttpRequestStream & request, HttpResponseStream & response)
        {
          String uri = request.getUri();
          response.respOkHeader();
         
          if(uri == "/demo.cgi")
          {
            //讀取溫濕度成功
            if(dht11.read() == Dht11::OK)
            {
              response.println("The room temperature and humidity is as follows:");
              //通過Web輸出當前溫濕度
              response.print((String)"
              Temperature:" + dht11.getTemperature() + (String)"℃");
         
              response.print("Humidity:");
              response.print(dht11.getHumidity());
              response.println("%");
            }
          }
        }
         
        void setup()
        {
          //初始化Rainbow
          boardInit();
          //初始化默認串口
          Serial.begin();
          //對網絡進行初始化
          Ethernet.begin(mac, ip);
         
          Serial.print("server is at ");
          Serial.println(Ethernet.localIP());
         
          //設置get請求的回調函數
          server.onGet = httpGet;
         
          //開始進行監聽
          server.begin();
        }
         
        void loop()
        {
          //對http請求進行處理,事件派發等
          server.processConnection();
        }
         
        int main()
        {
          setup();
          while(1) loop();
        }
         
            由于通過c++進行了封裝,使得可以用區區幾十行代碼實現了一個能夠讀取溫濕度并通過瀏覽器展示出來的應用。為了使Rainbow成為一個webserver,需要按照下列步驟進行:
            1、給Rainbow設定ip地址
            2、定義WebServer對象,并設定webserver的監聽端口:WebServer server(80);
            3、定義get或post請求的處理函數,函數的原型為:
               void httpGet(HttpRequestStream & request, HttpResponseStream & response)
               void httpPost(HttpRequestStream & request, HttpResponseStream & response)
               方法名可以自定,但是參數必須是HttpRequestStream 和 HttpResponseStream,分別代表瀏覽器發來的請求流和輸出流,通過請求流可以獲取請求的url、參數;通過輸出流可以將結果輸出到瀏覽器
            4、將get或post請求函數傳給webserver:server.onGet = httpGet;
            5、開始進行webserver監聽:server.begin();
            6、調用server.processConnection()進行http請求的派發,根據請求的方法調用不同的處理函數,如:httpGet或者httpPost
         
            本文介紹的這個webserver應用重點處理在doGet函數中,函數首先通過HttpRequestStream讀取到url,再判斷如果這個url是demo.cgi,則讀取溫濕度,通過HttpResponseStream中的方法輸出到瀏覽器中。在HttpResponseStream輸出內容之前,首先需要調用response.respOkHeader()來輸出http的頭部,這一步是必須的。
        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮