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

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM