查看原文
其他

使用ASP.NET Core 3.0 搭建智能小车

DotNet 2021-09-23

(给DotNet加星标,提升.Net技能

转自:蛋淡的忧伤
www.cnblogs.com/Gorillaz/p/11810121.html

跟随.NET Core 一起发布的System.Device.Gpio 1.0已经可以让我们用熟悉的C#原汁原味的开发莓派上面的GPIO了.并且在 Iot.Device.Bindings这个包下面有许多开发者已经封装好了许多模块,供我们使用



入门的教程可以参考https://www.cnblogs.com/zhanggaoxing/,写的非常好哈.


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


一、先安装树莓派.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.0-linux-arm.tar.gz -C $HOME/dotnet
tar zxf dotnet-sdk-3.0.100-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放在上面试一下了.


二、新建项目,并配置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 80 default_server;
server_name _;
location / {
proxy_buffer_size 128k;
proxy_buffers 32 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 10 seconds if the dotnet service crashes:
RestartSec=10
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




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


三、后记


下章在说怎么接线,并使用刚才建立的Web项目显示超声波模块的数据


参考: https://github.com/dotnet/iot


推荐阅读

(点击标题可跳转阅读)

树莓派搭建个人服务器

树莓派(4B)Linux + .NET Core嵌入式

树莓派+Windows IoT Core搭建环境监控系统


看完本文有收获?请转发分享给更多人

关注「DotNet」加星标,提升.Net技能 

好文章,我在看❤️

: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存