专注电子技术学习与研究
当前位置:单片机教程网 >> 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的头部,这一步是必须的。
关闭窗口

相关文章