スマートウォッチ2020年07月24日

自作スマートウォッチ

自分でスマートウォッチのプログラムを組むことができる(デザインできるとも言えます)Lilygo®Ttgo T-Wristbandというスマートウォッチを見つけてしまいました。日本国内では秋葉原ラジオデパート1階のShigezoneで取扱っています。使用しているプロセッサーはESP32-PICO-D4で4MBFlashメモリー搭載の最小ESP32プロセッサーです。もちろん搭載のインターフェースは2.4GWiFi、Bluetooth4.2 and BLE、GPIO、ADC、DACなど7mm角のチップに搭載され利用可能です。プログラミング環境は従来のESPシリーズと同様にArduino環境が利用できます。Lilygo®Ttgo T-Wristbandには1個のタッチスイッチ、3軸加速度3軸磁気センサー、リアルタイムクロック、0.96インチLCDディスプレー、オプションで心拍センサーや振動モーターがあります。バッテリーチェックのためにADCを利用しています。
サイズはXiaomi Mi Bandとほぼ同じです。さすがに防水機能は要求できません。水濡れなしの日常使いには問題ないと思われます。プログラムのアップロードにはケースを開け、USBシリアル搭載の拡張ボードをFPCケーブルで接続して行いますがリポバッテリーの充電は専用ケーブル(Xiaomi Mi Bandと同じ)で行なえるのでケースを開ける必要はありません。普通のスマートウォッチと同じように扱えます。

今回の注文でオプションの心拍センサーも注文していますので楽しみです。もちろんそれなりに表示させるためにはプログラミングが必要です。

サンプルプログラムや回路図です。
GitHub : Xinyuan-LilyGO/LilyGo-T-Wristband
GitHub : LovyanGFX SPI LCD graphics library

Raspberry Pi3 B+(2)2019年01月29日

Raspberry Pi3 B+のIOインターフェース

久しぶりにRaspberry Piをいじったら、node-redとpythonが大変使いやすくなっていたのでいろいろなものをGPIOやI2Cインターフェースに接続して遊んでみました。

  • 5Mピクセルのカメラモジュール
  • GPIOに直接接続
  • サーボ制御カメラマウントに2個のSG90サーボ
  • 2回路リレー制御モジュール
  • 超音波距離センサー
  • マイクロウエーブドップラーセンサー
  • NaPiOn人感センサー
  • 赤外線リモコン受信機
  • 赤色LED
  • I2Cインターフェースに接続
  • 4チャンネルADコンバーター (ADS1115)
    薄膜サーミスタ温度センサー
  • 1.3インチOLED (SH1106)

これらはすべてnode-redで直接制御できるか、pythonプログラムで制御できます。もちろんMQTTにも対応できます。
node-redのモジュールが充実しています。

pythonプログラムで美咲フォント(日本語フォント)を1.3インチOLEDに表示させてみました。読めますが流石に8x8フォントは小さいです。

久しぶりのRaspberry Pi2016年03月27日

Raspbian 8.0

この3月にRaspberry PiのOSであるRaspbianの最新版(Jessie)がアップデートされました。だからというわけではないのですが以前からVPNサーバーが定期的にダウンするという現象の原因がわからず悩んでいたので、Wheezyから新しい版のJessieで再作成することにしました。以前に紹介している温度センサーを接続しているサーバーです。今は出歩くことが減り家にいるのでVPNサーバーの必要性も薄れていることもありVPNサーバーは廃止し、I2CやGPIOのテスト機として再スタートです。Raspberry PiはSDカードさえ作り直せばどのような環境でも再作成が可能な所が良いです。

  • 基本OSにRaspbian jessie 8.0を使用する
    Linux 4.1.19になります。
  • 8GB SDカードにイメージを書き込む
    4GBではぎりぎりになってしまいます。
  • Raspbianの設定
    ネットワーク→ホスト名の変更、固定IPアドレス
    ローカル設定→使用言語、タイムゾーン、キーボード
    その他の設定→I2Cの使用
    日本語フォントのインストール
  • 追加ソフトウエア
    python-smbus
    i2c-tools
    digitemp
    lcdi2c

新OS上ではダイナミックDNSサーバーへIPアドレスを登録するスクリプト、室温と外気温をクラウドサーバーへデータ登録するためのスクリプト、接続した16桁2行キャラクターLCDへ日付曜日、時刻の表示が今のところcronに登録する定期実行JOBになります。Raspbian jessie 8.0からWiringPiは標準でインストールされていますのですぐにGPIOを使用できます。WEBブラウザからでも操作できるようにWebIOPiをインストールしました。WebIOPiなら別にhttpサーバーをインストールする必要がありません。このサイトを参考にしました。

WiFiモジュール(2)2016年02月13日

ESP8266改造

正月にいじっていたESP8266というWiFiモジュールの改造に成功です。改造と言ってもGPIOを2本引き出しただけです。オリジナルのESP-01は利用できるGPIOが2本しか出ていません。その他にはPCと通信するためのシリアル送受信ピンです。OneWire温度センサーにGPIOを使用しているので他に何もつけることができませんでした。今回はESP8266 ICの9、10ピンから直接配線をそれぞれ引き出し、GPIO14とGPIO12が使用できるようになりました。とは言え0.1mmピッチのICの足に直接リード線をはんだづけするわけです。引き出したGPIOはI2Cインターフェースとして使用します。
LCD-Blue-I2Cで紹介されているライブラリーを使用してI2C接続のLCD(PCF8574Tを使用)にIPアドレスとクラウドにアップした最新の温度を表示するようにしました。PCF8574Tと秋月の小型キャラクターLCDの組み合わせで動作させるためのコードは、

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define BACKLIGHT_PIN     3
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6,
       7, BACKLIGHT_PIN, POSITIVE);  
setup()の最初にI2C使用のピン番号を指定します。
Wire.begin(14, 12);
lcd.begin(16,2);      // initialize the lcd 
   ....
lcd.home ();          // go home
lcd.print("Hello,  ESP-01 ");  
をそれぞれ追加・修正しました。後は普通にLCDにデータを書き込みます。

WiFiモジュール2016年01月03日

ESP8266

年末にe-Bayに注文してあったWiFiモジュールが届きました。3Dプリンターの部材がまだ届かないので2016年のスタートは電子工作から始まりました。AI Tinker (中国)製のESP8266というモジュールを使用したWiFiモジュールです。ただのWiFi接続モジュールではありません。
CPU、メモリー、GPIOインターフェースを備えるマイクロコントローラーです。ということはこのモジュールのみでWiFi経由で外部機器が操作可能だということです。最近流行りのIoT用のモジュールデバイスです。最大の特徴はこのスペックで$4.00程度と大変安いことです。スペックは、

  • 32-bit RISC CPU: Tensilica Xtensa LX106 running at 80 MHz
  • 64 KiB of instruction RAM, 96 KiB of data RAM
  • External QSPI flash - 512 KiB to 4 MiB
  • IEEE 802.11 b/g/n Wi-Fi
  • Integrated TR switch, balun, LNA, power amplifier and matching network
  • WEP or WPA/WPA2 authentication, or open networks
  • 16 GPIO pins
  • SPI, I²C,
  • I²S interfaces with DMA (sharing pins with GPIO)
  • UART on dedicated pins, plus a transmit-only UART can be enabled on GPIO2
  • 1 10-bit ADC
AI Tinkerからは15種類のモジュールが出ています。モジュールによってはすべてのインターフェース機能が利用できるわけではありませんがESP-01(8ピン)モジュールでも2個のGPIOは利用可能です。
さてプログラミングですが、これがまたすごいところでArduino IDE環境でプログラミン・書き込みが可能です。最初だけちょっと面倒がありますが、これさえ済ませると後はArduinoと同様にプログラミングすることができます。ここのサイトを参考にしてください。
DS18B20温度センサーのサンプルを参考にThingSpeakにデータを送信するプログラムを作成しました。写真の回路を組んでプログラムを作って半日といったところです。すごく簡単にできてしまいます。できたものは乾電池2本でも動かすことができます。データは1分間隔で更新しています。温度ですからもっとゆっくりでもよいかもしれません。いろいろと工夫次第でIoTデバイスが簡単にできるWiFiモジュールです。

3Dプリンター(7)2015年11月13日

3Dプリンターで印刷

3Dプリンターが完成したらいよいよ印刷です。プリンターという名称が付いているので印刷と言っています。日本語では造形/造型という言葉があるためそちらがよく使用されていますが3Dプリンターで印刷したからといって目的のオブジェクトが完成するわけではないのであえて印刷と言っています。鋳型から取り出した状態と言ったらよいでしょうか。バリ取りや仕上げ(修正)、塗装といった工程を経てオブジェクトは完成します。3Dプリンターで印刷するまでの工程は大きく分けて3つのステップが必要です。
PCでオブジェクトの作成
目的のオブジェクトは3D CADソフトを使用して作成するか、インターネット上で公開されているSTL形式のデータをダウンロードします。3D CADソフトは高価で操作が難しいものが多く初心者には手が出ません。その中でも比較的操作法が簡単なソフトを選択しています。もちろんフリーソフトです。私はAutoCADの123D Designぐらいしか使用できません。

印刷形式(Gコード)に変換する
slic3rを使用します。作成されるGコードは3Dプリンターの制御情報を含んでいます。自分の3Dプリンターの設定条件を理解していないといけません。印刷がうまくいかない時はこの条件を変更します。対象のオブジェクトやフィラメント、室温によっても条件は変わってきます。Arduinoには基本パラメーターしか設定しませんのであとの細かな設定はここで行います。作成されたオブジェクトに対しても3D表示で簡単な操作が行えます。設定する項目が多く、英語なので以下のサイトも参考にしください。


3Dプリンターで印刷する
3Dプリンターに変換されたGコードを送るソフトが必要です。PC用のスタンドアローンソフト(printrun)やWEBアプリケーションとして動作するソフト(octoprint)があります。Raspberry Piにoctoprintをインストールし、3DプリンターをRaspberry Piに接続します。これでPCの横に3Dプリンターを置かなくてもすみます。またWEBブラウザさえあればタブレットでもよいので何かあった時に離れたプリンターのそばで操作ができ便利です。
3Dプリンターでは送られてきたGコードを解釈してホットエンド、ヒートベッドの温度管理とヘッド、ベッドの移動、フィラメントの送出を行います。

RasPBXではSDカードが駄目になる?2015年07月27日

RasPBXを動かしているとSDカードが壊れる

Raspberry Pi2Bにお手軽にRasPBXというパッケージでインストールしていました。しかし、1週間程度経つとまたは、リブートしようとするとファイルシステムが破損してしまいます。そこでraspbian(Linux)にAsterisk 11.6をインストールすることで復活を賭けました。稼働させてから1週間を過ぎましたがハングしていません。このまま安定稼働してくれるといいのですが。
これは想像ですが、FreePBXがMySQLを使用している関係で更新頻度が上がることが問題を起こしていたのではないでしょうか。Asteriskの管理ツールとしてはFreePBXは大変魅力的です。confファイルをエディターで修正していると関連性が不明確になることが多々あります。(単に物忘れの問題かも)FreePBXではそのへんは安心して操作が行えます。Asteriskの内線も5~6台ですのでそんなに苦にもならずに行えるのでよしとしています。通話ログはリブートすると消えてしまいます。安定稼働が第一ということでこのまま様子を見たいと思います。

温度センサーのデータをグラフにしてみた2015年06月13日

Raspberry Pi 2 B、B+で1-wire温度センサー

Raspberry Pi2 B、B+にdigitempという1-wire温度センサーのデータを読み取るアプリをインストールしました。Intelサーバーにもインストールしていました。1-wireは2線式のBUS接続インターフェースです。個々のセンサーが固有のIDを持っていてこれを使用してデータを読み出します。
使用しているセンサーはデジタル温度センサ(1wire)DS18B20+です。このセンサーを2個接続しているので室温と外気温度をそれぞれグラフ化しています。Raspberry PiはSDカードで、容量も8GBなのでうかつにデータ保存が出来ません。Thingspeak.comというフリーのopen data platformを利用します。このサイトにデータを送信するだけでグラフを作成してくれます。
Raspberry Piへのインストール手順です。

  • 0.Thingspeak.comにアカウントを作成
    Thingspeak.comでアカウントを作成する。
    Write API Keyを取得し、アップロードスクリプトの中に記述
  • 1.ソフトウエアのインストール
    sudo apt-get install digitemp
  • 2.初期設定、digitemp.confの作成
    sudo digitemp_DS9097U -i -s /dev/ttyUSB0 -c /home/pi/digitemp.conf
  • 3.テスト、動作確認
    sudo digitemp_DS9097U -a -s /dev/ttyUSB0 -c /home/pi/digitemp.conf
  • 4.データフォーマットを変更
    digitemp.conf内のデータフォーマットを変更
    LOG_FORMAT "%.2C"
  • 5.データアップロードの実行スクリプトの作成
    以下の内容を/home/pi/mytempscriptに保存する。
    #!/bin/bash
    temp1=$(digitemp_DS9097U -q -t 0 -c /home/pi/digitemp.conf)
    temp2=$(digitemp_DS9097U -q -t 1 -c /home/pi/digitemp.conf)
    url="http://api.thingspeak.com/update?key=[API Key]&field1=$temp1&field2=$temp2"
    wget $url -q -O /dev/null
  • 6.cronにスクリプトを登録
    この登録で温度データを5分間隔で登録しにいきます。
    */5 * * * * root /home/pi/mytempscript
digitempはDS9097U-S09(出力はRS-232C)という1-wireCOMポートアダプターを使用してデータを受け取るので秋月のFT232RL USB・RS232C変換モジュールを使用しました。/dev/ttyUSB0から読み込んでいます。秋月の変換モジュールはRaspberry PiのUSBに接続しただけで認識します。dmsgで確認して下さい。

サーバーがダウン2015年06月01日

Raspberry Pi 2 BでSoftEther VPNサーバー

長年使っていたCentOSのIntelサーバーがCPU温度の異常でダウンしてしまいました。IP PBX(Asterisk)はRasPBXに移行中だったので幸いにも復旧しています。SoftEtherサーバーはせっかく調子よく動き始めたところでしたのでちょっとショックです。5年以上動いてくれたでしょうか。SofutEther VPNが動いてくれればいいので早々RSにRaspberry Pi 2 Bを注文しました。折を見てIntelサーバーは復旧させることとしましょう。Raspberry Pi 2 BはRaspberry Pi B+とサイズや部品の配置は殆ど変わりませんが、レジストのロゴが小さい、CPUが700 MHz / ARM1176JZF-S 1コアから900MHz / ARM Cortex-A7 4コアに強化変更され、メモリーも倍の1GBに増強されたバージョンです。MicrosoftもWindows10でサポートを表明しているバージョンになります。
このボードコンピューターにOSとしてLinux Raspbian、SoftEther VPNサーバーnode.jsをインストールしました。DDNSの定期更新shellも入れています。BBルーターの変更とVPNサーバーの稼働で外からインターネット経由で自宅のネットワークに入れるようになりました。IP電話も接続OKですし、これでネットワーク接続の機器制御も可能です。
SDカードをストレージとしている機器でサーバーは無茶だとは思いますがSDカードイメージをバックアップしておけば簡単に復旧できるので手軽さを優先しています。Intelサーバーの修理が終わるまでと割り切っていますが、Raspberry Piだとファンレスなので静かなんです。裸では不安なので一緒にクリアケースも注文しました。

Raspberry Pi は起動ディスクとしてSDカードを使用します。東芝製の8GB SD Class10 40MB/sを使用していますが、ノーブランドの8GB Class10 SDカードではShutdown後にSDカードを取り出しているにもかかわらずファイルが破損するという事象が発生しています。書き込み速度が遅いことが原因?

BBルーターをBUFFALO製の無線LANルーターWHR-1166DHPに交換しました。SSL VPN、L2TP IPsec両接続に対応させるためでしたが、結果としてはインターネットアクセスも速くなりました。無線LANも2.4GHzと5GHz帯両対応になり、11acにも対応しました。これで目標のLANとVPN環境は整ったかな。