跟隨.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項目顯示超聲波模塊的數據
參考: