阅读目录

  • Raspkate - 基于.NET的可运行于树莓派的轻量型Web服务器
  • Raspkate项目
  • 演示
回到目录

Raspkate - 基于.NET的可运行于树莓派的轻量型Web服务器

最近在业余时间玩玩树莓派,刚开始的时候在树莓派里写一些基于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项目的整体架构设计:

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
<?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客户端将代码库克隆到本地:

1
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权限)。在成功启动后,你应该看到类似下面的画面:

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

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

1
netsh http add urlacl url="http://+:9023/" user=everyone
回到目录

演示

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

获取并显示树莓派信息

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

        

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

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

    

出处:https://www.cnblogs.com/Leo_wl/p/5319481.html

转载于:https://www.cnblogs.com/mq0036/p/11140947.html

C#写的WebServices可运行于树莓派相关推荐

  1. 树莓派3b写PHP代码可以吗,如何让LabVIEW程序运行在树莓派3B(此处有坑)

    原标题:如何让LabVIEW程序运行在树莓派3B(此处有坑) 上次转载了LabVIEW部署树莓派的文章后,很多小伙伴很兴趣,一个个都说要把压箱底的树莓派拿出来清下灰尘,也不知道到底拿出来没有. 放个之 ...

  2. gpio引脚介绍 树莓派3b_如何让LabVIEW程序运行在树莓派3B(此处有坑)

    上次转载了LabVIEW部署树莓派的文章后,很多小伙伴很兴趣,一个个都说要把压箱底的树莓派拿出来清下灰尘,也不知道到底拿出来没有. 放个之前文章链接如下: 零基础上手树莓派+免费正版LabVIEW C ...

  3. python怎么开始打代码_Python代码写好了怎么运行?

    Python代码写好了怎么运行?相信问这样问题的朋友一定是刚刚入门Python的初学者.本文就来为大家详细讲讲如何运行Python代码.一般来讲,运行Python代码的方式有两种,一是在Python交 ...

  4. Python代码写好了怎么运行?

    Python代码写好了怎么运行?相信问这样问题的朋友一定是刚刚入门Python的初学者.本文就来为大家详细讲讲如何运行Python代码.一般来讲,运行Python代码的方式有两种,一是在Python交 ...

  5. Python代码写好了怎么运行?为大家详细讲讲如何运行Python代码

    Python代码写好了怎么运行?相信问这样问题的朋友一定是刚刚入门Python的初学者.本文就来为大家详细讲讲如何运行Python代码.一般来讲,运行Python代码的方式有两种,一是在Python交 ...

  6. C语言中一个程序写完后怎么运行啊?

    C语言中一个程序写完后怎么运行啊? 当编写bai完一个程序后,需要首先进行编译,然后再运行. 如下图所示,程序编写完毕后,点击工具栏中的Execute,选择compile(编译). 如果没有错误,再选 ...

  7. 杰理之怎么区分芯片是不是烧写器烧写完后第一次运行?【篇】

    原理:烧写器烧写的时候把EEPROM擦写一遍,上电的时候检测EEPROM是否有"非第一次开机"标记,如果读不到这个标记,即为烧写器烧写完第一次开机运行.

  8. python写出来的程序怎么用_python写完程序怎么运行

    安装并配置完成之后,我们就可以编写第一个python程序.学过其他语言的兄弟姐妹们,都知道语言的入门程序就是hello world.那么,我们这里也以hello world来抛砖引玉,打开python ...

  9. 树莓派4直接运行linux,树莓派4最小化安装Linux

    树莓派4最小化安装Linux toc 1.本文目的 Raspberry Pi 4 Model B发布了半年了,其强大的性能与低廉的价格使得其非常的热门. 下面来看一下主要的功能 1.5GHz 4核心6 ...

最新文章

  1. 太酷炫了,我用 Python 画出了北上广深的地铁路线动态图
  2. saltstack管理saltstack认证相关
  3. bgb邻居关系建立模型_学习开发知识图谱中的长期关系依赖
  4. PHP大批量正则,php – 正则表达式匹配无限数量的选项
  5. 阿里云原生多模数据库Lindorm联合东软云科技,赋能车联网数字化运营运维创新升级
  6. sklearn应用—高斯混合
  7. java原型链_深入总结Javascript原型及原型链
  8. SAP Spartacus Header区域的渲染逻辑
  9. vue点击input框出现弹窗_vue组件实现弹出框点击显示隐藏效果
  10. 查看、修改linux系统的最大链接数限制、文件描述符限制、端口范围限制、虚拟内存等
  11. 翻译任务中的BPE词表实践总结
  12. Elasticsearch 索引
  13. 简单实用 微信授权登陆(网页版)
  14. vue 移动端H5微信支付和支付宝支付
  15. LeetCode #743 Network Delay Time
  16. 【Vue】Vue中的data数据包含html标签元素的解决方法
  17. E01-前端整合:【案例】添加数据页面
  18. 基于盲盒商城的飞机大战游戏
  19. deepin linux 桌面环境,Linux Deepin 新桌面环境的目标
  20. 5倍速xlsx转pdf

热门文章

  1. android n模拟器,BlueStacks推出Android N模拟器
  2. 无法打开“XXXX”,因为Apple无法检查其是否包含恶意软件。怎么解决?
  3. git分支feature和hotfix分支
  4. linux命令编写四位数密码本,grub-crypt命令 – 对口令进行加密
  5. 软件:推荐5款职场人必备的效率神器APP
  6. 系统运维:收集6款经典的服务器监控工具
  7. 工程师最重要的能力是什么
  8. 【原创】Ajax的用法总结
  9. linux python开发环境_如何在Linux系统中搭建Python编程环境
  10. java%4d_java积累