wonderCodeの日記

プログラミングの覚え書き

自作キーボード作ってみた(その1)

経緯

MacBookを使うようになってから、
平べったいキーボードを何の疑問もなく使っていました。
よく考えると使いにくいよね、というところから開始。

キーボード選択

ノートパソコン+キーボードで机の上にそんなに面積ないので、コンパクトなもの。
それから、左右分割の使い心地にすごく興味があったので、分割タイプ。
色々見たのですが、分割タイプ(市販品はない?)は、基本的に自作になり、
いきなり高価なものを買って、作れませんでしたでは困るので、比較的安価なものを選択。

HelixPico キーボードキットshop.yushakobo.jp

この時点では気が付いていなかったのですが、
安価=基板のみの状態で、購入者側がダイオードや、キースイッチのはんだ付けを頑張る必要ありです。
キーボードのキーの数だけ。つまり、50キーなら、50箇所です。
内容を見て、もう少しお高いものでも良かったかも。
高いなと思っても、キースイッチを嵌め込んで、
ProMicroをはんだ付けすればOKのようなキットもありました。

キーボード本体以外に必要な部品について

キーボード本体以外に購入する必要のある部品について

  • キースイッチ
    サイトの説明を見ながらお好みで良いかと思います。赤が無難?
    ちなみに、Pinkは基板にカチッとはまるので、はんだ付けが楽でした。
    はめ込んで裏返した際に、キースイッチが落ちてこないので、
    マスキングテープでのキースイッチの固定が不要。
    おそらく、Red Proも同じではないかと思います(こちらは試していない)。

Kailhロープロファイルスイッチshop.yushakobo.jp

  • キーキャップ
    少しお値段が高いですが、刻印ありのものを妥協せずに選ぶのが良いかと。
    初めてのキーレイアウトで、刻印なしはきついです。
    これがおすすめ。
    一番お金をかけるべきは、キーキャップではないかと思っています。。。

MBK Legend‡ Glow R2 blackshop.yushakobo.jp

  • 3.5mmステレオミニプラグオーディオケーブル
    お好みで。
    あまり期待はしていなかったのですが、
    遊舎工房さんで購入したものが、ケーブルが柔らかくて取り回しが良かったです。
    値段も安いし、これで良いのではないかと思います。

TRRSケーブルL字 0.15mshop.yushakobo.jp

  • マイクロBのUSBケーブル
    マグネット付きのものがおすすめです。
    ProMicroのUSBもげ対策も、もちろんあるのですが、
    キーボードのファームウェアを弄り出すと、
    左右分割キーボードの場合は、両方のキーボードにUSBを接続する必要が出てきます。
    抜き差しすることが多くなるので、マグネット付きの方が楽で良いです。

https://www.amazon.co.jp/gp/product/B096XXLPCB/ref=ppx_yo_dt_b_asin_title_o02_s01?ie=UTF8&th=1

  • その他 USBハブ
    ノートパソコンのUSBに、すでに色々繋げていると、
    キーボード接続すると電力不足の場合があるので。。。
    充電機能とハブの機能が両方ついたものを購入しました。
    USB PD対応って言うのですね。

次回

思っていたよりもボリュームがありそうなので、
何回かに分けて書こうと思います。
次は、あると便利な道具や作っていく上でのポイントについて。
LEDについて書くのを忘れましたが、難易度高い&手間がかかるので、
あまりお勧めはしないです。光るのかっこいいんですけどね。

Raspberry Pi PicoでLovyanGFXを使う

経緯

LovyanGFXというArduinoで使える汎用的な画面表示ライブラリがあるらしい。
さらに調べていると、picoにも対応、SSD1306(SPI)にも使える。
ということで試してみました。
日本語の表示をさくっと行いたいのです。
ライブラリを使わないと、フォントファイルを読み込んで、描画になってくる。

開発環境

最近お気に入りのPlatfromIOをVSCodeで使っています。
platformio.org

プラットフォームは、Raspberry Pi RP2040(earlephilhower版)です。

配線&コード

以下に上げています。
github.com

最初、全然うまくいかず、諦めかけていたのですが、
公式サイトを熟読。 github.com

こちらのブログを参考にさせていただきました。 qiita.com

ディスプレイの設定用ヘッダファイルを作るのは大体合っていたのですが、
spi_host、spi_modeの設定、配線辺りが間違っていた?
動いてしまえばこっちのものなので、この辺は追々理解していけば良いかと思っています。

まとめ

picoで動けば、pico wでも動くはずなので、
インターネット経由で情報取得して、表示させたりしたいと思っています。

Adafruit QT Py RP2040 MicroPythonによる開発

経緯

Adafruit製RP2040開発ボードのMicroPythonによる開発手順を調査。
公式サイトではCircuitPythonによる開発が詳細に解説されている。
MicroPythonによる開発にも対応していることが明記されているが、詳細が不明。

Adafruit製RP2040開発ボード

「Adafruit QT Py RP2040」を対象とする。

必要なもの

  • 「Adafruit QT Py RP2040」uf2ファイル
    Adafruitではなく、micropython.orgからダウンロード。
    micropython.org

MicroPython開発環境構築

1. uf2ファイル書き込み
「BOOTSEL」ボタンを押した状態で「Adafruit QT Py RP2040」をPCに接続。
「RPI-RP2」がディスクドライブに追加されます。
uf2ファイルを「RPI-RP2」の直下にコピー。
※CircuitPythonによる開発と同じ手順です。

2. IDE
IDERaspberry Pi Picoと同様に、「Thonny」を使用可能。 thonny.org

3. 内蔵RGB NeoPixel LEDを使用してLチカ
定番のLチカ。
「Adafruit QT Py RP2040」の内蔵LEDは、NeoPixel LED。
Raspberry Pi PicoでLチカを行うのとは、要領が異なる。
NeoPixelのライブラリ追加は不要。以下サンプルソース

import machine
from neopixel import NeoPixel
from time import sleep

# NEOPIXEL_POWER このピンをONにするとNEOPIXELが使用可能になる
LED_POWER = 11
# NEOPIXEL
LED_PIN = 12

def main():

    # NEOPIXEL_POWER ON
    ledPower = machine.Pin(LED_POWER, machine.Pin.OUT)
    ledPower.on()

    # 1ピクセル用の NeoPixel ドライバーをGPIO12で作成
    led = machine.Pin(LED_PIN)
    np = NeoPixel(led, 1)

    while True:

        # 第1ピクセルを白に設定 RGB
        np[0] = (10, 10, 10) 
        # ピクセルにデータ書込み
        np.write()
        # 1秒間、一時停止する
        sleep(1)

        # 第1ピクセルを消灯 RGB
        np[0] = (0, 0, 0) 
        # ピクセルにデータ書込み
        np.write()
        # 1秒間、一時停止する
        sleep(1)

if __name__ == "__main__":
    main()

まとめ

Adafruit製RP2040開発ボードもRaspberry Pi Picoと同様に、MicroPythonによる開発が可能。
また、NeoPixelをMicroPythonでライブラリの追加なしに操作可能。

ESPr® Developer 32の開発環境構築

開発環境

必要なもの

  • ESPr® Developer 32
    スイッチサイエンスのESP-WROOM-32搭載開発ボード
  • ピンヘッダ 20P x 2
  • 幅が広いブレッドボード
    ESPr® Developer 32 は幅が広い。
    普通のブレッドボードだと幅が足りず、両側から配線を引き出せない。
  • セラミックコンデンサ 0.1μF x 2
    スケッチのアップロードが自動でできなかったため追加
  • その他
    はんだごて、はんだ、ジャンパ線、USBケーブルは適宜用意

経緯

Arduino互換機?は、動かないとかトラブルがあったら嫌だなということで、
とりあえず純正品を使っていました。
ArduinoiPhoneでやり取りしたいということになってくると、
BluetoothWiFiが必要になってくるが、Arduinoには搭載されていない。
ESP32は、BluetoothWiFi搭載されていて、
割とメジャーな感じだったので、導入に踏み切りました。

開発環境構築手順

1. ピンヘッダをはんだづけ
合計40ヶ所、頑張ってはんだづけしましょう。
今回は、ピンヘッダ未実装の開発ボードを使用しましたが、
ピンヘッダ実装済のを購入すれば、はんだづけは不要です。

2. USB-シリアル変換IC(FT231XS)ドライバ
Espressifの開発ボードとは、シリアル変換ICの種類が違うので注意。
ESPr® Developer 32で必要なのは、以下のドライバです。
USB-シリアル変換IC(FT231XS)ドライバダウンロード先
ごちゃごちゃしていて分かりにくいのですが、
VCP DriversのMac OS X10.15 and macOS 11用をダウンロードして、インストールします。

USB-シリアル変換IC FT231XSドライバダウンロード
USB-シリアル変換IC FT231XSドライバダウンロード

3. 追加のボードマネージャのURLを追加
Arduino IDE(1.8.13を使用)はインストール済とします。
Arduino->Preferencesと選択して、以下のURLを追加します。
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

4. ボードマネージャでesp32をインストール
ツール->ボード->ボードマネージャーで、esp32を検索して、
esp32(バージョン2.0.1)をインストール。
ボードは、ESP32 Arduino->ESP32 Dev Moduleを選択。

5. シリアルポートで、「cu.usbserial-D309D3VH」を選択
ESPr® Developer 32とMacをUSBで接続後、
ツール->シリアルポートで、「cu.usbserial-D309D3VH」を選択します。

6. スケッチをマイコンボードに書き込み
後は適当なスケッチを用意して、マイコンボードに書き込むだけです。
ESP-WROOM-32のセットアップについてから引用

void setup() {
  Serial.begin(115200);
}

void loop() {
  Serial.println("Hello World.");
  delay(10000); 
}

7.スケッチの書き込みに失敗する場合
Connecting......と表示されている時に、FLASHと書かれている方のボタンを押しっぱなしにしてください。 とりあえずはこれで書き込みできるはずです。

8.Arduinoと同様に自動で書き込みをする場合
スケッチを書き込む際、ESP32を書き込みモードで起動する必要があります。
自動でモードが切り替わる仕組みは、搭載されているのですが、
環境によっては、EN端子がHighになるタイミングが早すぎるようです。
ESPr® Developer 32 回路図
回路図を見ると、ENとGNDの間に0.01μFのコンデンサ(C6)が入れられていますが、これではまだ足りないようです。
いろいろ試してみた結果、0.1μFのコンデンサ2つ追加で落ち着きました。

コンデンサ追加回路図
コンデンサ追加回路図

9. 考察
当初の懸念通り、ドライバのインストールや自動書き込みで手こずったので、BluetoothWiFiが不要な人は、純正のArduinoの方が無難です。

Arduinoでソフトウェアシリアル通信

千石電商さんで、面白そうな部品を見つけたので、購入してみました。

UARTをBluetooth通信に変換する部品。

これを使えば、ArduinoiPhone間で通信できるらしいので、その検証を。

有線(USB接続)での通信は、MFi認証の関係で無理そうだなと思っていたところ見つけたのがこれです。

www.sengoku.co.jp

 

この部品をArduinoで使っている記事あるかも、と少し探してみたのですが見つけられず。

公式サイトのお世話になります。

learn.adafruit.com

 

HWフロー制御?とかもできるらしいのですが、シンプルに電源、GND、UARTの配線だけで済ませたかったので、この回路図に落ち着きました。HWフロー制御有だと信号線の数が倍ぐらいになります。

f:id:wonderCode:20211128182828p:plain

回路図

 

f:id:wonderCode:20211128194802j:plain

ArduinoにBLEを配線

Arduino側のソースは、Arduino Micro用スケッチ例に、「SoftwareSerialExample」というちょうど使えそうなソースがあったので、これを流用。

 

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(57600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }


  Serial.println("Goodnight moon!");

  // set the data rate for the SoftwareSerial port
  mySerial.begin(9600);
  mySerial.println("Hello, world?");
}

void loop() { // run over and over
  if (mySerial.available()) {
    Serial.write(mySerial.read());
  }
  if (Serial.available()) {
    mySerial.write(Serial.read());
  }
}

 

mySerial.begin(9600);」の周波数を9600に変更したぐらいで、後はそのまま。

iPhoneには以下のアプリをインストール。

Bluefruit Connect

Bluefruit Connect

  • Adafruit Industries
  • ユーティリティ
  • 無料

apps.apple.com

 

Arduinoにソースを書き込むと、MODEの方の赤色LEDが2回ずつ点滅。そして、Bluefruit Connectから「Adafruit Bluefruit LE」に接続を行うと、CONNの青色LEDが点灯。

これで準備完了。

Arduinoのシリアルモニタから送信すると、

f:id:wonderCode:20211128193718p:plain

Arduino シリアルモニタ

iPhone(Bluefruit Connect)に送信した文字が表示されます。

f:id:wonderCode:20211128193842p:plain

iPhone (Bluefruit Connect)

 

iPhoneからArduinoへの送信も可能です。

これでiPhoneを、Arduinoの入出力インターフェースとして使用可能ということがわかったので、いろいろできそうですね。

 

 

Android StudioからRaspberry PiのSubversionに接続する

環境

OSX 10.10.2

Android Studio 1.0.2

Linux raspberrypi 3.12.35+ #730 PREEMPT Fri Dec 19 18:31:24 GMT 2014 armv6l GNU/Linux

==========================================================================

まず、Rapberry PiにSubversionをインストールします。

ここのサイトが参考になりました。

Raspberry PiにSubversionをインストールする - あんちょこ

2箇所、読み替えました。

1.aptitudeはapt-getで実行(いつもapt-getでインストールしているので)

root@raspberrypi:~# apt-get install xinetd

root@raspberrypi:~# apt-get autoremove

root@raspberrypi:~# apt-get install subversion

autoremoveは、以下のパッケージが自動でインストールされましたが、もう必要とされていません。これを削除するには 'apt-get autoremove' を利用してください。

と出てきたので実行。出てこなければ不要です。

2.リポジトリ作るところは、その前で、ユーザーsvnsvn実行する設定にしているので、

rootではなく、svnユーザで実行(たぶん誤記)

root@raspberrypi:~# su svn
svn@raspberrypi:/root$ svnadmin create /opt/svn/
svn@raspberrypi:/root$ vi /opt/svn/conf/svnserve.conf
svn@raspberrypi:/root$ vi /opt/svn/conf/passwd

svn@raspberrypi:/root$ exit

root@raspberrypi:~# service xinetd restart

参考ブログのままだと権限で怒られます。

インストールされたSubversionのバージョンは、1.7.5でした。

pi@raspberrypi ~ $ svn --version --quiet
1.7.5

 

Android Studio側は、適当にプロジェクトを作っておいて、

とりあえず接続できるかチェック。

ツールバーVCS→Browse VCS Repository→Browse Subversion Repisitory

f:id:wonderCode:20150201172647p:plain

+ボタンを押して、リポジトリのURLを入力。

f:id:wonderCode:20150201173619p:plain 

この時点でエラーが出る場合は、Raspberry Piを再起動してみてください。

 

新規プロジェクトをSubversionに登録する手順は、ここが参考になります

第28回 バージョン管理 ─Subversion連携とGoogle Code:Android Studio最速入門~効率的にコーディングするための使い方|gihyo.jp … 技術評論社

※注意事項

 Subversionの1.7を使用する際は、Android Studioに組み込まれている方のsvnを使う必要があるので、以下の設定を確認します。

ツールバーAndroid Studio→Preferences

f:id:wonderCode:20150201180251p:plain

左サイドバーVersion Control→Subversion

Use command line clientのチェックが外れていることを確認します。

f:id:wonderCode:20150201180349p:plain

チェックが外れていないと、Subversionに登録する際にエラーが出ます。

 起動時のPreferencesで設定しておくと良いでしょう。

 

後は、ツールバーVCS→Import into Version Control→Share Project (Subversion)で、

手順通りにすればOK。

f:id:wonderCode:20150201181630p:plain

Raspberry Pi を無線でつなぐ

 よくPCショップ等で、見かけるBUFFALOのWLI-UC-GNMを使用します。

大概の店で取り扱っていると思います。

f:id:wonderCode:20150126235826p:plain

 

これをRaspberry PiのUSB端子に突っ込んで、

$ sudo sh -c "wpa_passphrase ssid password >> /etc/wpa_supplicant/wpa_supplicant.conf"

 で、再起動すれば完了です。

ssidとpasswordは実際のものに置き換えてください。

ルータにシールで貼ってあったりします。

ssid→ネットワーク名

password→パスワード

 

やっていることは、wpa_passphrase ssid passwordの実行結果を、

/etc/wpa_supplicant/wpa_supplicant.conf"に追記。

なので、ssidとかpasswordを書損じた場合は、

$ sudo vi /etc/wpa_supplicant/wpa_supplicant.conf

で開いて、末尾の

network={
  ssid=“****”
  #psk=“*******”
  psk=***************************************
}

をddとかで消して、もう一度やり直して下さい。

一回目、なぜかパスワードをミスっていた。。。

 

つながらないときは、

ifconfigで無線LANアダプタにIPアドレス割り当てられているか、

iwlist wlan0 scan | grep ESSID で接続したいネットワーク名が表示されるか

など適当に調べてください。