跟随.net core 3.0 一起发布的System.Device.Gpio 1.0已经可以让我们用熟悉的C#原汁原味的开发莓派上面的GPIO了.并且在 Iot.Device.Bindings这个包下面有许多开发者已经封装好了许多模块,供我们使用.入门的教程可以参考https://www.cnblogs.com/zhanggaoxing/,写的非常好哈.

  我这里使用的是吃灰已久的树莓派3B,其他的配件还包括超声波模块,红外避障模块,TT马达(使用L298N驱动),一块定制的电路板(个人感觉,主要为了好看),电池盒,电压显示模块,第一步,先把这一堆配件组装起来,效果如下:

1.先安装树莓派.net core环境

  怎么接线等下章在讲 首选我们先把树莓派运行.net core的环境安上,由于现在官方操作系统Raspbian不是64位的.第三方系统我没有用,想在树莓派上跑 .net core 3.0,我们只能使用ARM32.怎么安装系统,百度一大堆,这里就不介绍了.

树莓派要联网,先更新系统:

sudo apt-get update
sudo apt-get upgrade

之后下载下载 .net core 3.0 sdk 和 asp.net core 3.0 runtime :

wget https://download.visualstudio.microsoft.com/download/pr/8ddb8193-f88c-4c4b-82a3-39fcced27e91/b8e0b9bf4cf77dff09ff86cc1a73960b/dotnet-sdk-3.0.100-linux-arm.tar.gz
wget https://download.visualstudio.microsoft.com/download/pr/e9d4b012-a877-443c-8344-72ef910c86dd/b5e729b532d7b3b5488c97764bd0fb8e/aspnetcore-runtime-3.0.0-linux-arm.tar.gz

下载完成之后我们建立一个目录,把刚才下载的文件解压进去

mkdir dotnet
tar zxf aspnetcore-runtime-3.0.-linux-arm.tar.gz -C $HOME/dotnet
tar zxf dotnet-sdk-3.0.-linux-arm.tar.gz -C $HOME/dotnet

现在只能在dotnet这个目录里面执行dotnet命令,要在任何地方都能执行命令,我们要创建一个环境变量指向这个文件夹.

export DOTNET_ROOT=$HOME/dotnet
export PATH=$PATH:$HOME/dotnet

我们使用dotnet --info看一下:

环境是装完了,但是重启这个环境不见了.所以我们需要配置一下自启动环境变量:

sudo vim .profile

这里我习惯使用vim 如果没有安装换成 nano即可

在最后添加:

export DOTNET_ROOT=$HOME/dotnet
export PATH=$PATH:$HOME/dotnet

保存 重启 可直接使用dotnet命令.到此为止,我们可以建立一个asp.net core的web放在上面试一下了.

2.新建项目,并配置nginx

  打开VS2019,新建一个asp.net core3.0项目:

我这里修改了 Program.cs 文件添加了指定监听:

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
webBuilder.UseUrls("http://localhost:5000/");
});

之后在树莓派home/pi下新建文件夹web->iot文件夹用debug模式生成把所有生成的文件全都传到这个目录下面.之后我们 dotnet 一下看看:

现在我们的网站只能localhost访问.现在我们安装NGINX做反向代理.首先,安装并启动ngix

sudo apt-get install nginx
sudo /etc/init.d/nginx start

打开配置文件:

sudo vim /etc/nginx/sites-available/default

替换为:

server {
listen default_server;
server_name _;
location / {
proxy_buffer_size 128k;
proxy_buffers 32k;
proxy_busy_buffers_size 128k;
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
# 转发websocket需要的设置
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X_Forward_For $proxy_add_x_forwarded_for;
}
}

保存 完成 测试 重启nginx:

sudo nginx -t
sudo nginx -s reload

现在我们dotnet我们的网站.在浏览器中使用树莓派的IP来访问:

但是这样有个缺点.我们必须每次重启都要dotnet xx.dll 并且程序一旦异常了,也需要手动执行.这里我们借助 systemd 服务实现来重启

sudo vim /etc/systemd/system/kestrel-carapp.service

替换如下内容:

[Unit]
Dcription=ASP.NET Core 3.0 App - Car [Service]
WorkingDirectory=/home/pi/web/iot
ExecStart=/home/pi/dotnet/dotnet /home/pi/web/iot/WebIoT.dll
Restart=always
# Restart service after seconds if the dotnet service crashes:
RestartSec=
KillSignal=SIGINT
SyslogIdentifier=dotnet-car
User=root
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false [Install]
WantedBy=multi-user.target

注意,systemd 要求我们使用绝对路径。

注册,并启动服务:

sudo systemctl enable kestrel-carapp.service
sudo systemctl start kestrel-carapp.service
sudo systemctl status kestrel-carapp.service

现在重启系统后也可以访问网站,不用我们手动敲命令了.

3.后记

今天就这么多了,下章在说怎么接线,并使用刚才建立的web项目显示超声波模块的数据

参考:

https://github.com/dotnet/iot

https://mp.weixin.qq.com/s/ksWs-_5JsmTQpACZfcKo6Q

  

使用asp.net core 3.0 搭建智能小车1的更多相关文章

  1. 使用asp.net core 3.0 搭建智能小车2

    上一篇中我们把基本的运行环境搭建完成了,这一篇中,我们实战通过树莓派B+连接HC-SR04超声波测距传感器,用c# GPIO控制传感器完成距离测定,并将距离显示在网页上. 1.HC-SR04接线 传感 ...

  2. asp.net core 2.0+sqlsugar搭建个人网站系列(0)

    一些废话 马上就要过年了,回顾这一年最大的收获就是技术有了很大的提升,其他的方面没有什么改变,现在还是单身小屌丝一枚. 这一年来学习的主要重点就是asp.net core,中间也使用 core+EF做 ...

  3. Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架

    Asp.Net Core 2.0 项目实战(1) NCMVC开源下载了 Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架 Asp.Ne ...

  4. win10下ASP.NET Core 2.0部署环境搭建(转)

    此文用于记录在win10环境下,新建的Asp.net Core 2.0 Web应用项目如何运行在IIS上 一.运行环境 操作系统: Window10 家庭中文版 版本 10.0.15063 版本 15 ...

  5. 初识ASP.NET Core 1.0

    本文将对微软下一代ASP.NET框架做个概括性介绍,方便大家进一步熟悉该框架. 在介绍ASP.NET Core 1.0之前有必要澄清一些产品名称及版本号.ASP.NET Core1.0是微软下一代AS ...

  6. ASP.NET Core 1.0 静态文件、路由、自定义中间件、身份验证简介

    概述 ASP.NET Core 1.0是ASP.NET的一个重要的重新设计. 例如,在ASP.NET Core中,使用Middleware编写请求管道. ASP.NET Core中间件对HttpCon ...

  7. 在 Mac OS 上使用 TypeScript 编写 ASP.NET Core 1.0 应用

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...

  8. 【原生态跨平台:ASP.NET Core 1.0(非Mono)在 Ubuntu 14.04 服务器上一对一的配置实现-篇幅1】

    鸡冻人心的2016,微软高产年. build 2016后 各种干货层出不穷. 1 Win10 集成了bash  ,实现了纳德拉的成诺,Microsoft Love Linux!!! 2 跨平台  ,收 ...

  9. ASP.NET Core 使用 JWT 搭建分布式无状态身份验证系统

    为什么使用 Jwt 最近,移动开发的劲头越来越足,学校搞的各种比赛都需要用手机 APP 来撑场面,所以,作为写后端的,很有必要改进一下以往的基于 Session 的身份认证方式了,理由如下: 移动端经 ...

随机推荐

  1. Angular 元素拖拽

    拖动元素到指定区域 拖放的同时传递数据 1. 安装 ng2-drag-drop npm install ng2-drag-drop --save 2. 模板中配置可拖拽元素 // drag.compo ...

  2. 让视频丝滑流畅——N/A通用补帧傻瓜解决方案

    补帧就是字面意思,把24帧的视频通过算法即时补偿到更高的帧数,获得更优秀的观感体验 索尼大法brivia电视的中高端产品线中的motionflow技术,都可以实现硬件补帧,只需要把动态打开,相应的画面 ...

  3. Thinkphp5.0第三篇

    批量插入数据 //新增一条数据的方法 public function add() { /*$user =new UserModel(); $user->id=1; $user->name= ...

  4. 【Oracle】SQL语句优化

    (1) 选择最有效率的表名顺序(只在基于规则的优化器中有效):  ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最 ...

  5. echarts地图边界数据的实时获取与应用,省市区县多级联动【附最新geoJson文件下载】

    首先,来看下效果图 在线体验地址:https://hxkj.vip/demo/echartsMap/,并提供实时geoJson数据文件下载 echarts官方社区链接地址(可在线编辑):https:/ ...

  6. golang的生产者消费者模型示例

    package main import "fmt" func Producer(ch chan int) { for i := 1; i <= 10; i++ { ch &l ...

  7. Flask学习之旅--Flask项目部署

    一.写在前面 Flask 作为一个轻量级的 Web 框架,具有诸多优点,灵活方便,扩展性强,开发文档也很丰富.在开发调试的过程中,我们往往会使用 Flask 自带的 Web 服务器,但如果要投入到生产 ...

  8. B-概率论-极大似然估计

    [TOC] 更新.更全的<机器学习>的更新网站,更有python.go.数据结构与算法.爬虫.人工智能教学等着你:https://www.cnblogs.com/nickchen121/ ...

  9. axios学习和使用

    网络请求的方式 传统的Ajax,基于XMLHttpRequest(不推荐) 配置调用方式混乱(回调地狱) jQuery-Ajax (在vue开发中不推荐) 相对于传统的Ajax非常好用 但是jQuer ...

  10. [NOIp2013] luogu P1966 火柴排队

    磕了瓶魔爪. 题目描述 你有两个长度为 NNN 的数组 a,ba,ba,b,试重新排列 aaa 数组使得S=∑i=1n(ai−bi)2S=\sum_{i=1}^{n}{(a_i-b_i)^2}S=i= ...