Nadine project using Asp.net Core 2.1 with SignalR, GPIO and Raspberry pi 3

This is a personal project. I wanted to discover Asp.net Core 2.1 and SignalR. I use a Raspberry pi 3 with an external board so I can easily plug cables and play with leds and buttons on GPIOs. Here is the goal : count on an input (Gpio 17) linked to a photo-electric cell the number of passage of a fake fabric bottle line, simulated here by one propal of an old usb fan. The signal is read on Gpio17 by the raspberry pi and sent via SignalR to a web client (which is also host on the same raspberry pi server, with asp.net core razor pages.) So I can read the counter on my web page in real time (almost). GIT source code : https://github.com/couscousbzh/Nadine Youtube Demo here : https://youtu.be/c3wAWcoAf0M What you need A Raspberry pi 3 + power A testing board + cables (https://www.amazon.fr/gp/product/B01I58Y766/ref=oh_aui_detailpage_o08_s00?ie=UTF8&psc=1) A case (optional https://www.amazon.fr/gp/product/B01KZ26LKA/ref=oh_aui_detailpage_o09_s00?ie=UTF8&psc=1) A SSH client (putty or mobaXTerm) A button (I use a little button on board and a eletric photo cell, but I guess you don’t have one…) Some cables How it works In Asp.net Core you can manage WebHost as usual (your web site) but you can add other host that can act like a service. This is what i’ve done. I create two services, webhost and a timehostedservice. If my english is not so bad, I understood that host and webhost services will be « Generic Host » in the future. So I guess this will change in the future. I notice some diffences when creating it. With webhost service you can configure it in one line (CreateDefaultBuilder) but there is no such thing for host. Anyway, all of this is coded in program.cs and startup.cs (this one is basically only used for webhost) Timehost is a loop, you set the frequence you’d like. I set a 1 ms loop. So every 1ms, I call a worker to do a job. Which is basically just to read Gpio 17 input state. I start the webhost first and then the timehost. Webhost takes time to launch. And if counting starts, it needs to connect to Hub and do a start connexion first. But if the webhost is not yet started, I have an error. So I delay the worker init to 10s. I know this is ugly, this is something I wanted to correct but I spent too much time. And by the way, i am not sure that running 2 services like that is the best solution. Maybe doing 2 separate projects with their own life is better. So I did not loose my time on this. Web Service (host) Basic project made with a « dotnet new webapp » cli command. Then I follow the microsoft guide line : https://docs.microsoft.com/fr-fr/aspnet/core/signalr/introduction?view=aspnetcore-2.1 this give me a little chat room exemple using SignalR. Then, I add a Counter Page. The goal of this is to simulate a counter (like a bottle counter sensor) and upload the value directly in client web page, using SignalR. Template Gentelella : https://github.com/puikinsh/gentelella npm init -y npm install @aspnet/signalr npm install gentelella –save dotnet build WARNING : all of my code use hard IP adresse 192.168.8.123, please change it to yours or add a dynamic system. GPIOs Service (host) Thanks to Jeremy Lindsay, I could use the GPIOs as I wanted. Here is some usefull links : https://jeremylindsayni.wordpress.com/2017/05/01/controlling-gpio-pins-using-a-net-core-2-webapi-on-a-raspberry-pi-using-windows-10-or-ubuntu/ https://jeremylindsayni.wordpress.com/2017/04/05/turning-gpio-pins-high-and-low-on-a-raspberry-pi-3-using-net-core-2-and-ubuntu/ https://jeremylindsayni.wordpress.com/2017/04/18/write-net-core-2-once-run-anywhere-hardware-access-on-raspberry-pi-3-with-ubuntu-and-windows-10-iot-core/ I copy some classes into /GpioManager folder. And my code is basically located into the worker class (/HostedServices/Worker.cs) Here is some usefull commands For Raspbian Debian 9 Jessie you need to do the following (only once): sudo apt-get update sudo apt-get install curl libunwind8 gettext apt-transport-https chmod 755 ./MyWebApp export ASPNETCORE_URLS= »http://*:5000″ export ASPNETCORE_URLS= »http://192.168.8.123:5000″ echo $ASPNETCORE_URLS ./MyWebApp WiringPi WiringPi is a lib for linux (not C#) this can be helpfull to check input status or manually set them. gpio readall gpio mode 0 in (0 match GPIO 17) gpio mode 2 in (2 match GPIO 27) gpio mode 5 out (5 match GPIO 24) Deploying Deploy Asp.net Core 2.1 https://github.com/dotnet/core/blob/master/samples/RaspberryPiInstructions.md#linux On dev environnement : dotnet publish -c Release -r linux-arm copy publish folder content to RapsberryPi or I wrote some powershell script that can helps to deploy in one command line. .\ps-deploy-raspian.ps1 -ip 192.168.8.123 -destination « /home/pi/Dotnet/Nadine » -username pi sudo ./home/Dotnet/Nadine/Nadine

Réalité Augmentée avec Unity et Vuforia

  Ça faisait bien un an que j’avais en stock une formation sur Unity. Et depuis l’auteur en a fait d’autre dont une sur la réalité augmenté avec Vuforia sur Unity. Alors ce coup ci, j’ai pas reporté. Je me suis lancé. J’avais en tête un projet de chasse au trésor en réalité augmentée, que j’ai réfléchi en été 2017. J’ai été voir quelques entrepreneurs du jeu. L’idée était de trouver un partenaire pour créer un jeu, un concept, des idées etc, et moi je m’occupais de la technique. D’ailleurs c’est toujours d’actualité ! Un organisateur de rallye, chasse au trésors et jeu de rôle, avec qui j’avais fait une étape de rallye à Rennes. C’était sympas.Le gars n’avait pas l’air branché informatique, je lui ai proposé mes services et un éventuel partenariat. J’ai pas sentit une vive émotion on va dire… J’ai aussi été voir « Terre de jeu », un magasin de jeu de société dont certains employés ont aussi une société d’organisation de jeu de rôle, murder party, etc. C’est leur boulot donc il voulait me vendre leurs prestations, ce qui ne m’intéressait pas, moi je souhaitais développer un nouveau concept. Donc on était pas sur un rapport de collaboration. Enfin j’ai été tâter une escape room à Rennes. Histoire de voir si je pouvais rencontrer des créateurs de salle. J’ai écris à deux personnes dans le tourisme (pays de Brocéliande et j’ai oublié l’autre), pour voir si de ce côté la on pouvait trouver des gens motivés.. J’en suis resté la. J’ai lancé une bouteille à la mer et j’attends toujours qu’elle soit trouvée.J’ai eu pas mal de taff depuis, je n’ai donc pas travaillé le sujet, mais la j’ai un peu de temps libre.   1 La réalité augmentée (Augmented Reality = AR). Je trouve que pour illustrer l’AR un bon exemple est celui d’Ikea et son catalogue que l’on pose au sol. Celui ci sert de référence pour l’application qui va permettre de modéliser sur le smartphone une représentation 3D d’un meuble que l’on souhaite voir dans sa maison.   Mais ce n’est qu’un exemple. On a vu grâce au jeu Pokeman Go qu’on peut aller beaucoup plus loin. Au delà du jeu, cette technologie intéresse de plus en plus le secteur de l’industrie ou les services. Il faut distinguer la réalité augmenté, qui consiste à ajouter du contenu dans une vue « réelle » (la caméra de votre smartphone), à la réalité virtuelle, qui elle n’est qu’un monde digitalisé (en 3d ou 2d). On peut aussi parler de réalité mixte. C’est du moins le point de vue de Microsoft avec leur Hololens, qui associe les deux et permet surtout l’interaction d’un univers virtuelle dans un univers réel. (comme par exemple lancer une vidéo sur votre mur en faisant un signe de la main, votre main est réelle, la vidéo est virtuelle, cependant vous la voyez sur un mur réel).   2 Unity Wikipédia : Unity est un moteur de jeu multi-plateforme (smartphone, Mac, PC, consoles de jeux vidéo et web) développé par Unity Technologies. Il est l’un des plus répandus dans l’industrie du jeu vidéo, du fait de sa rapidité aux prototypages pour les très gros studios, aussi pour la sphère du jeu indépendant qui développe directement dessus pour sortir leurs applications sur tout support Il a la particularité de proposer une licence gratuite dite « Personal » sans limitation au niveau du moteur. Unity utilise un éditeur de script compatible mono (C#) Donc Unity est un éditeur de jeu vidéo de plus en plus populaire. Moi il m’intéresse notamment par sa compatibilité C# et son portage sur plusieurs plateformes dont Windows, iOS et Android, mais aussi Playstation, Xbox,  Nintendo, Oculus Rift… Je ne suis pas expert dans ce milieu, d’un point de vu gamer je préfère le rendu du moteur Unreal Engine.D’un point de vu pro, Unity m’attire, sans avoir vraiment suffisamment de référence pour être certain de faire le bon choix. Les deux ont un intérêt. Voici une petite vidéo qui expliquera mieux que moi les différences :   3 Vuforia Vuforia est une plateforme dédiée à la réalité augmentée qui s’intègre parfaitement dans Unity. Ces deux outils vont nous permettre de créer des applications qui vont faire appel au moteur 3d Unity pour le rendu graphique et à Vuforia pour la réalité augmentée. Vuforia est la passerelle entre le monde réel et la version digitale que vous allez apporter à celui ci. Cette plateforme permet de reconnaitre des objets de votre entourage, des images, texte, le sol… A part pour le sol (encore bêta il me semble) qui ne nécessite aucune action préalable, les objets doivent être « scanner » avant d’être importés dans Unity comme « marker » afin d’être reconnu par Vuforia dans votre application. 4 AR avec une image L’exemple le plus simple est celui d’une image. Pour ma part j’ai pris ma carte de visite. J’ai envoyé son jpeg sur la plateforme (on peut en envoyer plusieurs). La plateforme analyse l’image et donne un score sous forme de 5 étoiles : Nous reste plus qu’à importer la base de donnée Vuforia et à l’importer dans notre projet Unity. En appliquant un cube 3D lorsque le marker (ma carte de visite) est détecter, on obtient ceci : 5 AR avec un objet réel Vuforia permet de scanner un objet réel de votre entourage pour le « modéliser » en 3d. On aura donc moyen par la suite, de la même manière que précédemment, d’identifier notre objet dans notre application pour ensuite faire ce que l’on veut. J’ai tenté de scanner un objet chez moi. Mais il faut une bonne lumière et un espace dégagé. Sur le moment j’avais un peu de mal a scanner mon objet correctement. Je suis passé à la suite car je n’avais pas vraiment d’intérêt sur l’instant. 6 AR et jeu vidéo Voici deux exemples d’application que j’ai réalisé grâce au cours que j’ai suivis (https://www.udemy.com/realite-augmentee-avec-unity-2017-et-vuforia/learn/v4/overview) :     Le jeu VuCarPark est un petit de parking. Le but est de garer une voiture…