2021年8月27日金曜日

microSDを修理に出してみた

 Samsung microSDHC EVO+の32GBが壊れていたんだけど、保証があるとは知らずにずっと放置していたんだけど、どうやら10年保証らしい?ので試しにサポートに連絡してみた。

壊れていたのは2017年に購入したやつ。Raspberry Pi 3B+用に購入してたんだけど、結局SandiskのmicroSDで使っていたので殆ど使ってなかった…

久しぶりにカードリーダーに入れて認識しなかったので、スマホやらなんやら試したけど全く認識しなくなってた。
RAM化していないラズパイで常時稼働とかで壊れるならわかるけど殆ど使ってないぞ…

ということでサポートにお問い合わせしてみた。

SDカード関連のお問合せフォームから必要な情報を入力してお問い合わせすると次の日には連絡が来た。microSDカード本体と、データ消去同意書、レシートを添付して宅急便で送ってくれとのこと。

Amazonで購入していた正規代理店品だったのでとりあえずクリックポストで送付してみた。
クリックポスト、プリンタ必要だけど安いし、手軽でいいかも。


2021年8月14日土曜日

Seeeduino Xiaoでプロコンを使ってみた。

 Arduino USB Host Shield Library 2.0でNintendo Switch Pro Controllerのサポートが追加されていたのでSeeeduino XiaoでSAMD版のライブラリに移植して動くかどうか試してみた。

SAMD用のUSB Host LibraryはUSB Host Shield Library 2.0がベースなんだけど、最近は殆ど更新されていないので本家のライブラリから置き去りに…
PS5用コントローラサポートはむしろSAMD版のForkから本家に移植されているような流れかも。

ライブラリの構造も結構にているので移植は意外と簡単だった。
まずは単純にプロコンに関係していそうなファイルをそのままコピーしてみた。
SwitchProBT.h
SwitchProParser.cpp
SwitchProParser.h
SwitchProUSB.h
この4つのファイル。

するとプロコン用のボタンの定義(ButtonIndex)が無いので、controllerEnums.hを書き換えないといけないっぽい。これもそのまま使えそうだったので移植。(サポートしてないコントローラの分も追加されてしまうけどとりあえずそのままで…)

お次はMFK_CASTUINT8Tが定義されていない…
本家ではsettings.hで定義されているんだけど、SAMD版にはそもそもsettings.hがない。
ということでSwitchProBT.h内で定義してしまった。(適当…

あとはexampleのBluetoothの中のSwitchProBT.inoをコピーして、
USB Usb;をUSBHost UsbH;に
BTD Btd(&Usb);をBTD Btd(&UsbH);に
あとはUsb.をUsbH.に置き換えれば完成。

これをSeeeduino Xiaoに書き込んで前回同様に接続し(USBの電源を取るのがちょっと面倒だけど)適当なBluetoothドングルをつなげばプロコンが使える。

PS3とかPS4コンも結構いいけどPCでMacアドレス書き込んだりしないといけないのが面倒なのでプロコン結構便利だと思うんだけどなぁ
ESP32だとPS3とかPS4コンのArduinoライブラリはあるけどプロコンはIDF使わないとだめなのが少し面倒そうだし…

2021年8月7日土曜日

Raspberry Pi PicoからHTTPSでPOSTしてみた。

 前回Raspberry Pi PicoにLANモジュールを付けてLAN内でWebサーバのテストをしてみたけど、せっかくSSL対応のライブラリを入れたのでインターネット上のサーバーにHTTPSでPOSTしてみることに。

まずはサンプルコードをテストしてみる。
EthernetWebServer_SSLライブラリにはWebClient_SSLっていうサンプルがあって、証明書もヘッダファイルとして入っているっぽい。

とりあえずそのまま動かしてみた。前回同様、変更する場所はdefine.hのUSE_ETHERNET_ENCをtrueにしてほかをfalseにしただけ。

とりあえずSSLで通信はできてそう。

サンプルが動くことがわかったのでこのサンプルをちょっといじってLINE Notify APIを叩いて、LINEを送ってみた。
ESP-WROOM-02で作ったときみたいにinsecureでもいいんだけど今回はかんたんにトラストアンカーを作ってくれるサイトがあるらしいので(ライブラリに書いてあった)それを使用して証明書を作ってもらうことに。

まずはBearSSL Trust Anchors Generatorでnotify-api.line.meのトラストアンカーを作成する。Domains To Includeってところにnotify-api.line.meって入れて生成すると、下の方に出てくるのでそれをコピペしてサンプルのtrust_anchors.hと差し替える。

あとはサンプルのserver_host[]をnotify-api.line.meに変更して、GETしてる部分をLINE Notify用に書き換えただけ。
スケッチ貼り付けるまでじゃないと思うのでこんな感じの雰囲気で編集したということでスクショ。Tokenも直で入れちゃってるし…
これを実行すると{"status":200,"message":"ok"}が帰ってきてLineに通知が届いた。
このライブラリ、結構かんたんにHTTPSが扱えるので便利だなぁ。

サンプルがだいぶ汎用性持たせられてるっぽいのでRaspberry Pi Pico専用にスケッチを作ればもっとシンプルになるかも。
IoT的な何かをやるなら最近HTTPSが多いけどRaspberry Pi Picoのパワーを持ってしてやれば結構余裕かも。TwitterやLineのBotも普通に作れそう。WiFiならESP32やESP8266とかで直接できるようなライブラリあるのでソッチのほうがいいかも。

そういえばENC28J60自体は1MB/sぐらい出せそうらしいけど、Raspberry Pi Picoの性能だとどこまで引き出せるんだろうか?

2021年8月1日日曜日

Raspberry Pi PicoをLANにつないでみた

 この前入手したRaspberry Pi PicoだけどとりあえずArduino IDEで使えるようにしてみた。
ラズパイと言ったらIoT、インターネットに繋がないと!(偏見
ということで、SPI接続なイーサーネットコントローラを使用してネットワークに接続してみた。Wifiに接続するんだったらそもそもESP32でいいような気もするのであえて有線のLAN。

ArduinoでLANと言ったら今だとW5500のモジュールが結構小さくて、スケッチのサイズも小さくなるらしいんだけど、だいぶ前に買ったENC28J60のモジュールがあったのでとりあえずそれを使用することに。UNOに比べてリソースたっぷりあるし。

中にはPIOとDMAを駆使してRMII実装してLAN8720を使えるようにしてる人もいるみたいだけど、今回はライブラリ豊富なSPI接続タイプを…

まずはArduino IDEにRaspberry Pi Picoを追加する。

とりあえずArduinoCore-mbedの方にした。これはArduino純正なのでボードマネージャーからそのまま入れることができる。

次にENC28J60を使うためのライブラリを入れる。
EthernetENCっていうライブラリが便利そうだったのでこちらをライブラリマネージャーからインストール。ライブラリマネージャーから入れられるのもかんたんで良いね。
このEthernetENCはArduino純正のSPIライブラリに対応しているので結構いろんなマイコンで動くらしい。
あとはArduinoのEthernetサンプルのEthernet.hをEthernetENC.hに変更するだけで大抵は動くらしい。UDPマルチキャストには対応していないみたいなのでmDNSとかUPnPとか一部動かない機能もあるかも。
お次はRaspberry Pi PicoとENC28J60モジュールの接続。
Raspberry Pi Picoの3.3Vは800mA流せるDC/DCコンバーター(RT6150B)っぽいので最大180mA流れるENC28J60もダイレクトにつないでしまって大丈夫そう。
ArduinoCore-mbedでSPIを使用する場合、デフォルトで、
MOSI: 3
MISO: 4
SCK: 2
SS: 5
になってる模様。ENC28J60のSIはMOSI、SOはMISO、SCKはSCK、SSはCS、あとは電源とグラウンドの6本繋げばOK。まだピンヘッダ実装していないのでとりあえず適当に…

とりあえずサンプルスケッチを動かしてみた。EthernetのWebServerの
#include <Ethernet.h>を#include <EthernetENC.h>に変更して
Ethernet.init(5);の部分のコメントアウトを外すだけ。
IPアドレスはセグメントを合わせるために変更。

とりあえずこれでLANに接続することができた。ブラウザからアクセスするとシリアルコンソールにブラウザの情報が表示される。(ブラウザになにか表示させるサンプルではない) Arduino UNOとかだとこのサンプルだけでかなり容量食ってしまうんだけどさすがRaspberry Pi Picoは余裕っぽい。

とりあえず動作確認はできたので次はEthernetWebServer_SSLを使ってSSLに対応させてみる。
EthernetWebServer_SSLもライブラリマネージャーから入れることができる。
とりあえずEthernetWebServer_SSL→WebServerを試してみる。
define.hタブを開いて、
#define USE_ETHERNET          true
をfalseに
#define USE_ETHERNET_ENC      false
をtrueに変更する。

あとはそのまま書き込むだけ。最初からこのサンプルを試したほうが良かったかもしれないぐらいかんたんだった…
ちなみにArduino IDEから書き込み失敗する場合はBOOTSELボタンを押した状態でUSBを指し直すといけるっぽい。
シリアルコンソールに表示されるIPアドレスにブラウザからアクセスするだけでブラウザに文字が表示される。これぞ本当のWebServer。

まだこのライブラリを入れた本当の意味であるSSLは試せてないんだけど長くなったので次回に続く。ローカルならSSLあんまりいらないかもしれないけど、インターネットに繋ぐなら最近はHTTPS多いしこのライブラリ重要かも?
Raspberry Pi PicoぐらいリソースがあればインターフェースとしてLANも悪くないかも。パルストランスでアイソレートされてたりするし。