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

  跟随.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.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放在上面试一下了.

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        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

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

3.后记

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

参考:

 https://github.com/dotnet/iot

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

 

  

posted @ 2019-11-07 10:47  蛋淡的忧伤  阅读(953)  评论(5编辑  收藏  举报