· 

.NET IoTをやってみる(1)

 

.NET IoTってのがあるらしい。で、そいつでデバイスいじれるってのがちょっとすごいよね。で、ちょっと触ってみちゃう。"List available devices"まで。こちら(https://dotnet.microsoft.com/ja-jp/apps/iot)が本家。FT232Hのモジュールがうちにあったので、そいつをちょっくら動かしてみる。ところで、この.NET IoTで扱えるデバイスについてはこちら(https://github.com/dotnet/iot/blob/main/src/devices/README.md?WT.mc_id=dotnet-35129-website)にリストがある。ここにない素晴らしいデバイスもあるんだけど、、、業界の闇だね。プレゼンのうまい会社がイニシアチブをとっちゃう。

では、やってみよー٩( 'ω' )و
で、code .って入力してVSCodeを起動するとこうなる。
で、.NET IoTのチュートリアルにFT232Hの例(https://learn.microsoft.com/en-us/dotnet/iot/usb)が運よくあったので、これをそのままやってみる。

最初の「List available devices」をコピペすると、
こんな感じで赤い線が引かれちゃう。なぜか、、、必要なpackageが開発環境に入ってないからでございます。
dotnet add package System.Device.Gpio
dotnet add package Iot.Device.Bindings
ってのをコマンドプロンプトから実行すればいいらしい。
Tutorialを最初っから通してやればわかるようだけど、なんとも不親切。世の中の人は通してやるほど気が長くないよね。
VSCodeのTerminalで実行するス。すると、赤い線が消える。
で、Terminalで
dotnet build
ってする。
こうなる。で、
dotnet run
ってする。
まぁぼっこぼこにされちゃう。ftd2xx.soがないぞgmksって言われているらしい。いや、こちら(https://github.com/dotnet/iot/blob/main/src/devices/Ft232H/README.md)にLinuxなら要らんって書いてあるような気がするんやけどな(あ、うちは今メインPCはLinuxなんであります)、、、ちなみにWindowsならftdiのドライバがインストールされていればこの段階でちゃんと動きます。
で、エラーメッセージによると、
Unhandled exception. System.DllNotFoundException: Unable to load shared library 'ftd2xx' or one of its dependencies. In order to help diagnose loading problems, consider using a tool like strace. If you're using glibc, consider setting the LD_DEBUG environment variable:
/home/hoge/worklocal/dotnet_iot/study1/bin/Debug/net7.0/runtimes/linux-x64/native/ftd2xx.so: cannot open shared object file: No such file or directory
/usr/lib/dotnet/shared/Microsoft.NETCore.App/7.0.15/ftd2xx.so: cannot open shared object file: No such file or directory
/home/hoge/worklocal/dotnet_iot/study1/bin/Debug/net7.0/ftd2xx.so: cannot open shared object file: No such file or directory
ってなっているので、言われたとおりの場所にftd2xx.soを入れちゃいたくなるけど、それじゃダメだった。

愚直にftdiのドライバをftdiのマニュアルに従って入れていく。
ftdiのドライバのページ(https://ftdichip.com/drivers/d2xx-drivers/)からLinux用ドライバをもってきて、ReadMe.txtを読んで、まったくその通りにすればよい。で、Linuxのkernel次第らしいけど、うちの場合は
sudo rmmod ftdi_sio
sudo rmmod usbserial
までやらんといかんかった。これってデバイスを抜き差しするたんびにせんといかんらしい。要注意や(kernelから消し去ればいいらしいけど、まぁこれはこれで放置する)。で、
でけた。

色々つまずいて、こんなんやったら、DLL直叩きやらpyftdiのほうがいいわいって言いたくなるけど、きっと何かイイコトがあるに違いない。