專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> STM32 >> 瀏覽文章

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

作者:白櫟旸   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2014年04月30日   【字體:

  Rainbow開發(fā)包中有關(guān)于HTTP服務(wù)器的封裝,使得我們可以通過簡單的代碼實(shí)現(xiàn)在瀏覽器中進(jìn)行一些參數(shù)配置、信息的輸出。Rainbow有了Web接入能力,數(shù)據(jù)的展示、輸入的接收都可以通過瀏覽器進(jìn)行,這就為Rainbow物聯(lián)網(wǎng)的開發(fā)提供了必要條件。

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

相關(guān)文章