使用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/,寫的很是好哈.linux

  我這裏使用的是吃灰已久的樹莓派3B,其餘的配件還包括超聲波模塊,紅外避障模塊,TT馬達(使用L298N驅動),一塊定製的電路板(我的感受,主要爲了好看),電池盒,電壓顯示模塊,第一步,先把這一堆配件組裝起來,效果以下:nginx

1.先安裝樹莓派.net core環境git

  怎麼接線等下章在講 首選咱們先把樹莓派運行.net core的環境安上,因爲如今官方操做系統Raspbian不是64位的.第三方系統我沒有用,想在樹莓派上跑 .net core 3.0,咱們只能使用ARM32.怎麼安裝系統,百度一大堆,這裏就不介紹了.github

樹莓派要聯網,先更新系統:web

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

下載完成以後咱們創建一個目錄,把剛纔下載的文件解壓進去vim

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看一下:websocket

環境是裝完了,可是重啓這個環境不見了.因此咱們須要配置一下自啓動環境變量:app

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

相關文章
相關標籤/搜索