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

      

  • 相关阅读:
    No Hibernate Session bound to thread, and configuration does not allow
    谈谈数据库中MyISAM与InnoDB区别
    hibernate实体的几种状态:
    解决Eclipse导出javadoc乱码问题
    freemarker截取字符串
    many-to-one和one-to-many的配置比较
    one-to-many many-to-one配置解释
    extends:类似于java中的继承特征,extends="struts-default"
    eclipse 中创建maven web项目
    java.lang.ClassNotFoundException: javax.persistence.EntityListeners
  • 原文地址:https://www.cnblogs.com/Gorillaz/p/11810121.html
Copyright © 2020-2023  润新知