zoukankan      html  css  js  c++  java
  • Raspkate

    最近在业余时间玩玩树莓派,刚开始的时候在树莓派里写一些基于wiringPi库的C语言程序来控制树莓派的GPIO引脚,从而控制LED发光二极管的闪烁,后来觉得,是不是可以使用HTML5+jQuery等流行的前端技术做一个简单的Web站点,让树莓派搭载这个站点,通过手机或者平板电脑来控制树莓派。经过一番调研,考虑如下:

    • 使用Apache或者Nginx搭建一个Web服务器
      • 优点:服务器实现相对成熟
      • 缺点:偏重,而且与树莓派的交互需要涉及Service调用,而实现RESTful服务对于Apache或者Nginx需要额外的组件支持,要付出一定的学习成本
    • 使用Python+Flesk
      • 优点:技术相对成熟,也有很多成功应用案例
      • 缺点:对于我来说需要额外学习Python语言

    基于这样的前提,鉴于目前Mono在Linux下的出色表现,想想还是自己使用.NET开发一个轻量型的Web服务器吧,第一期版本让它既支持静态文件的访问服务,也支持RESTful API的调用,在RESTful API中可以暴露访问树莓派GPIO引脚的接口,供HTML5+jQuery的单页面应用调用,于是也就实现了在任意设备上通过浏览器来控制树莓派的目的。

    Raspkate项目

    Raspkate项目的名字,我想就是两个方面:Rasp,它来源于树莓派的英文名字Raspberry Pi,有表示“小、轻量”的意义,而Kate则寓意能够充分发挥开发者的想象,对其进行扩展和定制。Raspkate就是这样一款基于.NET Framework、由C#开发的轻量型Web服务器,它的核心部分是一个HttpListener对象,通过多线程模型将HTTP请求异步委托给HttpListener执行。当一个HTTP请求被接受的时候,Raspkate会根据请求的格式或类型,分配特定的模块(Module)对请求进行处理,然后将处理结果返回。如果请求的是一个文件,那么Raspkate会返回文件的内容,如果是一个RESTful请求,则Raspkate会使用已经注册的RESTful API控制器来处理这个请求,并将计算结果以JSON格式返回。

    开源地址

    Raspkate项目是开源的,代码库地址是:https://github.com/daxnet/raspkate,所使用的许可协议是GPL2.0,(因为其所使用的与树莓派相关的组件是第三方的由GPL2.0授权的开源库),因此,不能在商业环境中使用此项目。

    应用场景

    您可以在以下场景中使用Raspkate:

    1. 在自己的应用程序中实现内建的Web服务器(Self-Hosting)
    2. 将Raspkate寄宿在Windows Service中,向外提供RESTful服务
    3. 将Raspkate寄宿在Windows Service中,向外提供静态Web页面请求服务
    4. 将Raspkate作为树莓派中的一个独立的小型Web服务器,提供控制树莓派GPIO的Web用户界面

    整体架构

    下图展示了Raspkate项目的整体架构设计:

    ArchitectureOverview

    可以看到,在Raspkate核心部分就是一个HTTP Listener组件,并且由Module和Configuration支撑Raspkate完成HTTP请求处理。每个模块可以包含多个HTTP Handler,这在定义模块的时候可以对多个HTTP Handler进行注册。

    Raspkate配置信息(也就是上图中的Configuration)非常简单,下图就是这个配置信息的类型视图,在RaspkateConfiguration对象上,设定了HttpListener所使用的Prefix,而Modules部分则指定了Raspkate扫描可用模块的路径,IsRelative指定模块路径是否是相对的。

    image_thumb8

    以下是一个标准的Raspkate配置文件:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
        <section name="raspkateConfiguration" type="Raspkate.Config.RaspkateConfiguration, Raspkate"/>
      </configSections>
    
      <raspkateConfiguration xmlns="urn:Raspkate.Config" prefix="http://127.0.0.1:9023/">
        <modules>
          <add path="modules"/>
        </modules>
      </raspkateConfiguration>
    
    </configuration>

    代码使用

    首先,使用Git客户端将代码库克隆到本地:

    git clone https://github.com/daxnet/raspkate

    然后,在装有MSBuild的Windows机器上,执行build.bat命令:

    • build.bat All - 这将编译所有模块,并将模块的二进制文件复制到modules目录下
    • build.bat Minimal - 这仅编译核心模块(不包含类似树莓派支持等扩展模块)

    如果是在装有Mono的Linux机器上,则相应地执行build.sh即可。

    在编译完成之后,进入bin目录,执行RaspkateService.exe即可(注意:如果是在树莓派中执行,并且希望加载树莓派支持模块,则需要通过 sudo ./RaspkateService.exe 命令执行,以获得root权限)。在成功启动后,你应该看到类似下面的画面:

    image_thumb1

    这时,打开浏览器,在浏览器中输入http://127.0.0.1:9023,您应该可以看到类似以下的画面:

    image_thumb5

    这表示您已经成功运行Raspkate服务,此页面显示了运行服务器相关的信息。注意:如果你希望你的Raspkate服务能够在同网络的其它机器访问,请在执行RaspkateService.exe之前,将RaspkateService.exe.config文件中的Prefix设置修改为:http://+:9023/。但这样做可能会牵涉到用户访问控制的问题,如果将Prefix改为该值后,出现Raspkate无法启动的问题,请先在Command Line执行:

    netsh http add urlacl url="http://+:9023/" user=everyone

    演示

    这里有几张屏幕截图,展示了Raspkate提供的相关功能。

    获取并显示树莓派信息

    以下屏幕截取自我的手机浏览器,分别显示了我的树莓派系统信息、树莓派主板信息以及树莓派中所有引脚的名称、类型和电平值列表。

    Screenshot_2016-03-20-20-23-10_com.a[1]    Screenshot_2016-03-20-20-23-57_com.a    Screenshot_2016-03-20-20-24-22_com.a[2]

    使用HTML5+jQuery控制发光二极管的点亮和熄灭状态

    前端是一个寄宿在Raspkate上的一个HTML5+jQuery的单页面应用,后端是运行Raspkate的树莓派。

    image_thumb9    image_thumb10

  • 相关阅读:
    linux驱动开发学习一:创建一个字符设备
    如何高效的对有序数组去重
    找到缺失的第一个正整数
    .NET不可变集合已经正式发布
    中国人唯一不认可的成功——就是家庭的和睦,人生的平淡【转】
    自己动手搭建 MongoDB 环境,并建立一个 .NET HelloWorld 程序测试
    ASP.NET MVC 中如何用自定义 Handler 来处理来自 AJAX 请求的 HttpRequestValidationException 错误
    自己动手搭建 Redis 环境,并建立一个 .NET HelloWorld 程序测试
    ServiceStack 介绍
    一步一步实战扩展 ASP.NET Route,实现小写 URL、个性化 URL
  • 原文地址:https://www.cnblogs.com/daxnet/p/5306587.html
Copyright © 2011-2022 走看看