none
ASP.NET Core auf dem Raspberry Pi mit Linux, GPIO, PI Camera u.v.m RRS feed

  • Allgemeine Diskussion

  • Hallo,

    ich wollte auf einem Pi eine ASP.NET Core Anwendung betreiben und dennoch vollen zugriff auch die Hardware haben. Um die dafür notwendigen Infos zusammen zu tragen habe ich ca. 2 Tage gebraucht. Um jeden anderen diese lästige Suche und das probieren x Anleitungen zu ersparen, habe ich mich dazu entschlossen hier eine einfach Anleitung zusammen zu stellen.

    Erstmal vorweg ich bin kein Linux Guru. Das letzte mal das ich Linuxserver verwaltet habe ist schon 10 Jahre her. Mehr als die Grundbefehle habe ich nicht drauf. Man muss sich auf Linux einlassen und es nicht mit Windows vergleichen. Rasbian ist keine schlechte Wahl.

    • Rasbian von raspberrypi.org downloaden. (Ich habe mich für Rasbian Lite ohne Desktop entschieden)
    • Rasbian auf SD Karte kopieren - Dazu dieser Anleitung folgen 
    • SD Karte in den PI stecken, zudem Monitor und Tastatur anschließen
    • PI ans Netzteil anschließen und Bootvorgang abwarten
    • Anmelden mit pi und Passwort raspberry (Achtung englische Tastatur y ist auf z)
    • Befehl eingeben: sudo raspi-config (englische Tastatur beachten - findet man am Nummernblock)
    • Unter Change User Password Passwort ändern
    • Unter Interfaceing Options SSH antivieren 
    • Unter Network Options Wi-Fi einrichten oder Netzwerkkabel anschließen
    • Putty downloaden und im Standard installieren. Jetzt können wir den Pi mit Putty steuern (dank SSH) und können Monitor und Tastatur entfernen.
    • Putty starten und die IP oder den Namen (raspberrypi) von Pi eingeben
    • Anmelden mit pi und Passwort
    • Um aus ASP.NET Core auf die PI Hardware zugreifen zu können brauchen wir eine Lib. Ich habe mich für RaspberryIO entschieden. Dafür müssen wir den PI vorbereiten. 
    • Alle Befehle aus dem Bereich For Debian Stretch nacheinander in Putty eingeben (kopieren mit STRG>c - Putty Fenster anklicken - rechte Maustaste drücken - return/enter auf der Tastatur drücken)
    • Alle Befehle aus dem Bereich Running .NET Core 2.2 wieder in Putty eingeben. Damit ist der PI für .NET Core vorbereitet.
    • ASP.NET Core Anwendung in Visual Studio erstellen (Ich nenne die Anwendung AspNetOnPi)

    Die Programm.cs öffnen und anpassen

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
                WebHost.CreateDefaultBuilder(args)
                    .UseStartup<Startup>()
                    .UseUrls("http://*:5000");//Port hinzugefügt

    Jetzt müssen wir noch einen Ordner für die Anwendung auf dem Pi erstellen. Dafür nutzen wir wieder Putty und geben folgenden Befehl ein:

    mkdir /home/pi/AspNetOnPi (oder halt deinen gewünschten Ordnernamen).

    Zum Deploy nutze ich ein Batch Datei die ich im Projektordner angelegt habe. Das ist eine einfache Textdatei mit der Endung .bat. Der Inhalt sieht so aus

    dotnet publish -r linux-arm /p:ShowLinkerSizeComparison=true 
    pushd .\bin\Debug\netcoreapp2.2\linux-arm\publish
    pscp -pw <Das Passwort des Pi> -v -r .\* pi@raspberrypi:/home/pi/AspNetOnPi
    popd

    Jetzt kann die Batch ausgeführt werden. Damit erstellt am die Anwendung und kopiert sie mit SCP auf den Pi. (Vorher speichern in VS nicht vergessen)

    Um die Anwendung starten zu können, müssen ihr entsprechende rechte zugewiesen werden. Dafür nutzen wir wieder Putty und geben nacheinander folgende Befehle ein

    cd /home/pi/AspNetOnPi (oder halt den Namen deines Ordners)

    sudo chmod 755 AspNetOnPi (Den Namen deiner ASP.NET Core Anwendung)

    Jetzt können wir die Anwendung mit

    ./AspNetOnPi 

    starten und mit den Browser deiner Wahl die Website besuchen (http://raspberrypi:5000). 

    Um nun z.B. die GPIO aus ASP.NET zu nutzen einfach den Anleitungen auf RaspberryIO folgen.

    Um die Anwendung auf dem Pi zu Debuggen, können wir uns an den Prozess anhängen. Wie das geht wird hier beschrieben Attach Debugger to ASP Core on Linux (ca. in der Mitte)



    Gruß Thomas
    13 Millionen Schweine landen jährlich im Müll
    Dev Apps von mir: UWP Segoe MDL2 Assets, UI Strings




    Freitag, 1. Februar 2019 00:11

Alle Antworten

  • Mittlerweile hat auch Microsoft die GPIO APIs aus UWP in .NET Core verfügbar gemacht. Diese stehen nun in der Version 1 auf Nuget bereit.

    System.Device.Gpio

    Die PiCam oder eine andere Kamera kann man über OpenCV verfügbar machen. Dazu braucht man noch einen Wrapper wie z.B. OpenCVSharp

    Eine Anleitung um OpenCV auf dem RPI zu installieren habe ich hier gefunden Install OpenCV 4.1.2 on Raspberry Pi 4

    Man muss aber aktuel die Version 4.2.0 installieren dazu muss man die Befehle etwas anpassen. Im grunde ist es diese abfolge:

    #RPI Config
    sudo raspi-config
    Advanced Optioins > Memory Split > 128
    Interface Options > Pi Camera Enable

    #Dependencies
    sudo apt-get -y install build-essential cmake git unzip pkg-config libjpeg-dev libpng-dev libtiff-dev libavcodec-dev libavformat-dev libswscale-dev libgtk2.0-dev libcanberra-gtk* libxvidcore-dev libx264-dev libgtk-3-dev python3-dev python3-numpy python-dev python3-pip python-numpy libtbb2 libtbb-dev libdc1394-22-dev libv4l-dev v4l-utils libjasper-dev libopenblas-dev libatlas-base-dev libblas-dev liblapack-dev gfortran gcc-arm* protobuf-compiler

    #OpenCV
    wget -O opencv.zip https://github.com/opencv/opencv/archive/4.2.0.zip
    wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.2.0.zip
    unzip opencv.zip
    unzip opencv_contrib.zip
    mv opencv-4.2.0 opencv
    mv opencv_contrib-4.2.0 opencv_contrib

    #Build
    cd ~/opencv/
    mkdir build
    cd build
    cmake -D CMAKE_BUILD_TYPE=RELEASE \
            -D CMAKE_INSTALL_PREFIX=/usr/local \
            -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
            -D ENABLE_NEON=ON \
            -D ENABLE_VFPV3=ON \
            -D WITH_OPENMP=ON \
            -D BUILD_TIFF=ON \
            -D WITH_FFMPEG=ON \
            -D WITH_GSTREAMER=ON \
            -D WITH_TBB=ON \
            -D BUILD_TBB=ON \
            -D BUILD_TESTS=OFF \
            -D WITH_EIGEN=OFF \
            -D WITH_V4L=ON \
            -D WITH_LIBV4L=ON \
            -D WITH_VTK=OFF \
            -D OPENCV_EXTRA_EXE_LINKER_FLAGS=-latomic \
            -D OPENCV_ENABLE_NONFREE=ON \
            -D INSTALL_C_EXAMPLES=OFF \
            -D INSTALL_PYTHON_EXAMPLES=OFF \
            -D BUILD_NEW_PYTHON_SUPPORT=ON \
            -D BUILD_opencv_python3=TRUE \
            -D OPENCV_GENERATE_PKGCONFIG=ON \
            -D BUILD_EXAMPLES=OFF ..

    #Swap change to CONF_SWAPSIZE=4096
    sudo nano /etc/dphys-swapfile
    sudo /etc/init.d/dphys-swapfile stop
    sudo /etc/init.d/dphys-swapfile start

    #Make OpenCV
    make -j4
    sudo make install
    sudo ldconfig
    sudo apt-get update

    #Mono
    sudo apt-get -y install apt-transport-https dirmngr gnupg ca-certificates
    sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
    echo "deb https://download.mono-project.com/repo/debian stable-raspbianstretch main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list
    sudo apt-get update
    sudo apt-get install mono-complete

    #.NET Core 3.1
    sudo apt-get -y install libunwind8 gettext
    wget https://download.visualstudio.microsoft.com/download/pr/67766a96-eb8c-4cd2-bca4-ea63d2cc115c/7bf13840aa2ed88793b7315d5e0d74e6/dotnet-sdk-3.1.100-linux-arm.tar.gz
    sudo mkdir -p /usr/share/dotnet
    sudo tar -xvf dotnet-sdk-3.1.100-linux-arm.tar.gz -C /usr/share/dotnet
    sudo ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet

    #OpenCVSharp https://github.com/shimat/opencvsharp
    cd ~
    git clone https://github.com/shimat/opencvsharp.git
    cd opencvsharp
    git fetch --all --tags --prune && git checkout ${OPENCVSHARP_VERSION}
    cd src
    mkdir build
    cd build
    cmake -D CMAKE_INSTALL_PREFIX=${YOUR_OPENCV_INSTALL_PATH} ..
    make -j4
    sudo make install

    #Swap change to CONF_SWAPSIZE=100
    sudo nano /etc/dphys-swapfile
    sudo reboot

    Was auch gut funktioniert ist dieses Github Projekt V4L2.NET


    Gruß Thomas
    13 Millionen Schweine landen jährlich im Müll
    Dev Apps von mir: UWP Segoe MDL2 Assets, UI Strings



    Dienstag, 24. Dezember 2019 00:06