電 子 工 作

RaspberryPiを利用したいろいろの工作結果、等を書いてみます。


デジタル時計(OLED表示器使用、SPI接続)

2024.8.27投稿

OLED表示器を使用したデジタル時計の製作で、OLED基板の改造時に傷をつけ、I2C接続では使えなくなった。
一度削除したR17に4.7KΩを取り付け、何とかSPI接続で使用できる状態になった。
I2C接続での操作を参考にして、SPI接続で、各種文字・画像・時刻などの表示を試みた。

1.使用したもの
・小型ディスプレー   2.42″OLED表示器 128×64dot SSD1309使用(72×43mm)Amazonで購入
・Raspberry Pi Zero W スイッチサイエンスで購入
・ブレッドボード    P-05155 秋月電子通商…手持ち在庫

 2.42″OLED表示器

2.準備
・Raspberry Pi…OS:Raspberry Pi OS bullseye 32bit
        GPIO部分にコネクタを取付

・Raspberry PiとOLED表示器の接続
 ブレッドボードを介して、下記の様に接続した。

   ディスプレー  Raspberry Pi

    GND      GND
    VCC      3.3V
    SCL      SCLK
    SDA      MOSI
    RES      GPIO27
    DC       GPIO25
    CS       CE0

 

3.動作準備 Rasoberry Pi
・OS Raspberry Pi OS (bullseye) 導入後、update,upgrade
・SPIが使え、Pythonで制御できるようにする
 raspi-configを実行。インターフェース・オプション設定で、SPIを有効にする。

4.動作プログラムの実装・テスト
デモ用のサンプルファイルをダウンロードし、実行します。

 sudo wget https://files.waveshare.com/upload/2/2c/OLED_Module_Code.7z
 7z x OLED_Module_Code.7z
 cd OLED_Module_Code/RaspberryPi

Pythonの環境もRaspberry Pi OSなら既にインストールされていますから、いきなりサンプルプログラムを動作させる事が出来ます。

サンプルプログラムの場所 ~/OLED_Module_Code/RaspberryPi/python/example

2.42″OLED表示器用のサンプルプログラムは、OLED_2in42_test.py

sudo python3 OLED_2in42_test.py

5.時計用プログラムの作成・動作テスト
上記のサンプルプログラムをベースに、I2C仕様で動作させていたclock5の内容を取り込み、SPI仕様のOLED表示器で動作するデジタル時計のプログラムを作成した。  tokey-4.py


デジタル時計(OLED表示器使用、I2C接続)     

2024.8.26投稿

CO2センサーを使用したCO2計で、OLED表示器を使用したが、表示部分をもう少し大きくできないかと思っていた。
同じOLED表示器の大型のものを使用してのデジタル時計の製作記事を見つけ、追試してみた。
 土日で完成!趣味のラズパイ ラズパイとChatGPTで遊ぼう——液晶時計を作る
 https://fabcross.jp/category/make/hobby_raspberrypi/20240228_chatgpt_lcd_clock.html 

1.使用したもの
・小型ディスプレー   2.42″OLED表示器 128×64dot SSD1309使用(72×43mm)Amazonで購入
・Raspberry Pi Zero W スイッチサイエンスで購入
・ブレッドボード    P-05155 秋月電子通商…手持ち在庫

 2.42″OLED表示器

2.準備
・小型ディスプレーの改造…購入したものは、SPI接続で使用するようになっていた。今回は、ネット記事の内容通りI2C接続で使用した。そのため、チップ抵抗取り外しなど、一部改造を実施した。
 改造内容 R17 チップ抵抗(4.7KΩ?)取り外し、オープン
      R13,R15 短絡
      R18 オープン
・Raspberry Pi…OS:Raspberry Pi OS bullseye 32bit
        GPIO部分にコネクタを取付

・Raspberry PiとOLED表示器の接続
 ブレッドボードを介して、下記の様に接続した。

   ディスプレー  Raspberry Pi

    GND      GND
    VCC      3.3V
    SCL      GPIO3
    SDA      GPIO2
    RES      10KΩを介して5V
    DC       GND
    CS       非接続

 *後述するが、表示の安定性・再現性、プログラムの自動起動がうまくいかず、ディスプレーの改造等を再試行している時にパターンを傷つけてしまった。
  I2C接続での安定な表示を続ける事が出来なくなってしまった。

3.動作準備
3-1 Rasoberry Pi
・OS Raspberry Pi OS (bullseye) 導入後、update,upgrade
・I2Cが使え、Pythonで制御できるようにする
 raspi-configを実行。インターフェース・オプション設定で、I2Cを有効にする。
 I2C関連のツール等をインストールする。
  sudo apt install i2c-tools

3-2 OLED表示器の接続確認
 i2cdetect -y 1
  0x3c が表示される

4.動作プログラムの実装・テスト
4-1 文字列(日本語含む)の表示
下記記事から、ssd1306_text.py 及び ssd1306_nihongo.py

 ラズパイを使って、OLED表示デバイスに文字列や画像を表示するよ
 https://zenn.dev/kotaproj/articles/6f08ea43cd4dda8e0d2f

パッケージおよび日本語フォントをインストール
 pip install adafruit-circuitpython-ssd1306
 pip install smbus2
 pip install pillow
 sudo apt-get install fonts-ipafont

4-2 時刻表示
先頭部分に記したfabcrossの記事から、clock2.py
描画の draw.textsizeの部分で、エラーとなる。
不良の原因・対処が今一つ不明のため、4-1 のプログラムで使用しているフォント、draw.textを用いたプログラムに変更した。 clock4.py
・時刻情報の入手 current_time = time.strftime(“%H:%M:%S”)
・時刻表示    draw.text((0, 0),current_time,font=font, fill=255)

4-3 時刻以外に日付、曜日(日本語表示)、天気情報を表示する
以後主に下記のようなプログラムの動作確認を経て、ほぼ完成へ。
・時刻、曜日の表示         clock4-3.py
・時刻、曜日、天気情報(東京)の表示 clock-tenki.py
・時刻、曜日、天気情報(京都)の表示 clock-tenki-1.py
・日付、曜日、時刻、天気情報(京都)の表示 clock-tenki-2.py
・日付、曜日、時刻、天気情報(京都)の表示 clock5.py …上記から表示の位置を変更

・各情報の取得・表示については、
 曜日情報の入手 current_day = time.strftime(“%A”)
 日付情報の入手 current_date = time.strftime(“%Y/%m/%d”)
  %Y:西暦年号 %y:西暦年号の下2桁
 天気情報の入手 OpenWeatherMap APIキーを取得し、OpenWeatherMapから情報を入手する
  weather_info = get_weather()
 曜日情報の表示 draw.text((70,10),current_day,font=font3, fill=255)
 日付情報の表示 draw.text((10,10),current_date,font=font3, fill=255)
 天気情報の表示 draw.text((25,46),weather_info, font=font3,fill=255)

5.各種問題点
 第1の問題点は、OLED基板の改造。入手した基板は、IPS接続仕様のものだった。I2C接続で用いるためには、改造が必要であり、基板裏面に一応表示してあったが、参考にした記事のものとは改造点が異なっており、入手した基板と同じものでの改造資料をネットで入手するのに結構手間取った。またより確実な情報と確認するのにも時間を要した。
 第2の問題点は、電源投入時またはプログラム開始時、表示器が白い濁点表示となってしまうことだった。
 当初は、OLED基板の不良、ラズパイとの接続不良を疑ったが、発生がアトランダムだったこと、接続確認で0x3cが表示されないことがある、などから、I2C接続状態が不良だと思われた。
 ネットの各種情報から、RESET信号が正しく入っていないと思われた。
 RESET信号は、電源投入から少し遅れて、プルアップ信号が入ることが必要で、RCで時間遅れを生じさせることが必要だと分かった。
 0.1μFのコンデンサが入手できず、5Vから100KΩを介して接続した場合が、比較的安定に動作した。
 この状態になるまでに基板の改造等でパターンに傷をつけてしまい、下記の接続が最も望ましいとの確証までにはやや不十分ではある。

 Raspberry Pi GPIO2番(5V) — 100KΩ — OLED基板 RES


CO2センサーの利用

2023年7月7日更新

CO2センサーが結構安く入手でき、Raspberry Piに接続して”簡易CO2計”を作ってみた。

当初Raspberry Pi 4Bを使用して製作したが、Raspberry Pi Zero 2Wを入手したので、全体をより小型化するためにZero 2Wで製作しなおしてみた。

1.準備したもの
・CO2センサー基板  SEN-CCS811…Amazonで購入
・小型ディスプレー OLED Display 0.91inch for Arduino ARM…Amazonで購入
・ブレッドボード  P-05155 秋月電子通商…手持ち在庫
・Raspberry Pi Zero 2W…スイッチサイエンスで購入

2.接続
・SEN-CCS811
   VCC—Raspberry Pi-3.3V
   GND—Raspberry Pi-GND
     SDA—Raspberry Pi-SDA GPIO(2)
     SCL—Raspberry Pi-SCL GPIO(3)
     RST—Raspberry Pi-VCC(3.3V)
     WAKE—Raspberry Pi-GND
・OLED Display
     GND—Raspberry Pi-GND
     VCC—Raspberry Pi-3.3V
     SCL—Raspberry Pi-SCL GPIO(3)
     SDA—Raspberry Pi-SDA GPIO(2)

              Raspberry Pi 2W GPIOの詳細

3.動作準備
3-1 Rasoberry Pi
・OS Raspberry Pi OS (bullseye) 導入後、update,upgrade
・I2Cが使え、Pythonで制御できるようにする
 raspi-configを実行。インターフェース・オプション設定で、I2Cを有効にする。
 I2C関連のツール等をインストールする。
  $ sudo apt install i2c-tools

3-2 センサーの接続確認
 $ i2cdetect -y 1
  0x5a または 0x5b が表示される

4.動作プログラムの実装
4-1 動作プログラム…テスト1  動作途中でエラー発生
 下記の記事を参考に、忠実に実行した。

 *参照記事 Itmediaの記事
  部屋の二酸化炭素濃度を測定しよう ラズパイでCO2センサーを作る
  https://www.itmedia.co.jp/news/articles/2109/18/news032.html

 ・CircuitPythonをインストール
 ・I2CとSPIの動作確認
 ・CircuitPythonのライブラリのインストールを確認…blinkatest.pyを実行
 ・CCS811のライブラリのインストール
 ・/boot/config.txtへの追記
 ・測定・表示プログラムの実行…ccs811test.py

 CO2、TVOCの値が表示され始めたが、途中でエラーが発生。表示がストップした。
 以後再度動作コマンドを入力しても、即エラーが発生。
 (私のPythonの理解力が不十分で、プログラムの動作不良個所での挙動が十分に把握できてないことも一因)

 なお本センサーは、使用初期に48時間のエージングが推奨されており、測定開始後安定した値になるまで20分程度必要とされている。
 十分に時間をおいてから、測定・表示プログラムの実行を試みたが、エラーの発生は解消できなかった。

4-2 動作プログラム…テスト2  動作途中でエラー発生
 CCS811の操作プログラムに関する記事を検索した結果、SEN-CCS811に関する記事は上記の他に見つからなかった。
 が、同等機能の基板BME280に関する記事がいくつか見つかった。そのうち下記の記事を参考にして動作テストをしてみた。
 なお、動作準備の条件が4-1とは多少異なるので、新しいSDHCカードにOSをインストールすることから始めた。

 *参照記事
  【Raspberry Pi】空気品質センサCCS811を使って我が家の空気を観測する
  https://temcee.hatenablog.com/entry/air_quality

 ・OS Raspberry Pi OS (bullseye)  導入後、update,upgrade
 ・I2Cが使え、Python3で制御できるようにする
  raspi-configを実行。インターフェース・オプション設定で、I2Cを有効にする。
  I2C関連のツール、Python3での制御のためのモジュール等をインストールする。
   $ sudo apt install i2c-tools
   $ sudo pip install smbus2
 ・Python3系を使うようにする
  デフォルトPythonのバージョン確認
   $ python -V
  Python2系がデフォルトの場合、Python3系に変更する
   $ cd /usr/bin
   $ sudo unlink python
   $ sudo ln -s python3 python
   $ cd ~
  3系に変わったことを確認
   $ python -V
    Python 3.7.3 など3系が表示されれば、OK
  Python3系へのシンボリックの確認
   $ cd /usr/bin
   $ ls -al | grep python
    python -> python3 の表示がされればOK 
 ・センサー基板のI2C接続確認
   $ i2cdetect -y 1
    0x5aを検出
 ・/boot/config.txtへの追記
   dtparam=i2c_baundrate=10000
 ・動作関連プログラムccs811.pyを入手。
 ・動作プログラムatom_log.pyを実行する。
  
 ccs811.pyを呼び込んで実行する部分でエラーが発生したが、 エラーの内容・対処方法など十分にできなかった。

4-3 動作プログラム3  プログラムを一部手直しし、動作OK
 投稿された時期は少し古いが、シンプルなプログラム例が見つかったので、テストしてみた。

 動作条件は、4-2にほぼ同等。

 *参照記事
  Qiita @-nvh の投稿記事
  PythonでI2Cセンサ(CCS811/BME280)を読んでいろいろ表示してみた(Matplotlib、Dash)
 
 ・OS Raspberry Pi OS (bullseye)  導入後、update,upgrade
 ・I2Cが使えるようにする。
  raspi-configを実行。インターフェース・オプション設定で、I2Cを有効にする。
  I2C関連のツール、Python3での制御のためのモジュール等をインストールする。
   $ sudo apt install i2c-tools
   $ sudo pip install smbus2
 ・Python3系を使うようにする
 ・センサー基板のI2C接続確認
   $ i2cdetect -y 1
    0x5aを検出
 ・動作関連プログラムccs811.pyを入手。
 ・動作プログラムexample.pyを実行する。
  
 今回もエラーが発生したが、プログラムを良く読み、下記の作業も行った結果、動作しだした。
 ・ccs811.pyについて…センサーの接続が0x5bになっていた。0x5aに変更
 ・example.pyについて…BME280関係のプログラム行はすべて削除し、 example-1.pyとして実行する
 ・$ sudo pip install smbus2 を再度実行

example-1.py

5.小型ディスプレーへの表示
 RaspberryPiにssd1306を使用した小型ディスプレーをI2C接続し、文字を表示するプログラムを見つけた。(下記参照記事)

 *参照記事
  SSD1306表示デバイスを使って、文字列や画像を表示する
  https://zenn.dev/kotapro/books/raspberrypi-tips/viewer/250_kiso_ssd1306
 
  ラズパイで測定したCO2とTVOCの値をディスプレーに表示させる
  https://www.itmedia.co.jp/news/articles/2109/18/news018.html


 端末にCO2濃度を表示する上記のexample-1.pyに、文字表示のプログラムを付け加えればいいと考えた。

 ・小型ディスプレーへの文字表示用モジュールのインストール
   $ sudo pip install adafruit-circuitpython-ssd1306
   $ sudo pip install pillow
 ・文字表示プログラムssd1306_text.pyを実行
 ・example-1.pyとssd1306_text.pyを合体したプログラムmeasure.pyを作った。
  当然文字表示コマンドdrawの部分は、CO2濃度の表示になるよう変更した。

 文字(CO2,TVOC,ppm,ppb)は正しく表示するが、co2,tvocの測定値がどうしてもうまく表示できない。
 drawコマンドの書式が正しくないと思われたが、それ以外の要因もありそう。
 試行錯誤の結果、drawの前に下記のように測定値の入手コマンドを書き加えることで、解決できた。
  voc, co2 = ccs811.get()
 フォントの大きさ、表示位置、表示間隔など少し変更した。

measure.py

現在は写真のようにバラックで動かしているが、小さなケースの中に配置し、簡易CO2計にしてみたい。


監視カメラ(IPカメラ)

2016年11月20日

RaspberryPi B+にカメラモジュールを取付け、適当なプラスティックケースに組み込んで監視カメラにしてみました。
苦労したのは、
 仮設置テストでWiFiで繋がっていたのに、設置予定場所では接続が不安定
 (自宅無線LANのAPへの接続が自宅周辺の場所によりかなりバラツキ大)
 自宅外からの接続(画像のストリーミング配信)がうまくいかなかった
 (一時的に成功したが、通信設定などいろいろテスト中にNGになった)
WiFi接続…無線LANアダプターの交換、無線LAN子機をケース内に組み込み、等いろいろ試みたが、最終的には接続安定な個所を何とか探し出した。
ストリーミング配信…サーバーの設定、ネットワーク関連の設定をよく見直し成功

監視カメラ設定詳細1へ  (CPU基板を変えて再製作。下記№2。)


監視カメラ(IPカメラ) 2

2017年 8月 日

製品完成・販売のアナウンスから約5ヶ月、やっと待望のRaspberryPi Zero Wが入手できました。技適合格まで長かったこと。
早速カメラモジュールを接続し、監視カメラの製作に取り掛かりました.。
Rasp Pi Zero Wの小さいこと。これで無線LANもBluetoorhも搭載されているとは!正に今はやりのIoT向けにぴったりのCPU基板でしょう。
Raspberry Pi B+基板を基に動作させせていた経験とカメラモジュールを動作させるドライバーの組み込み方法の記事を見つけて、うまく動作するようになりました。
現在、カーポートの柱に取り付け、動作テスト中です。

監視カメラ設定詳細2へ

監視カメラ映像


センサーライト

2016年11月 日

赤外線センサーによる動体検知基板(キット)を入手して組み立て、接点出力を利用してLEDライト2個を点灯するようにしてみました。
適当なプラスティックケースに部品類を取付けましたが、センサーとLEDライトの取付け角度が悪く、人間の検知とライト点灯方向がうまく調整できなかった。
明るさ検知をCdsで行ったが、その調整幅が狭く、夜間のみ点灯がうまくいかず見た目の不格好さ、屋外での取付の難しさ、等から市販品を購入しました。
カーポートの柱に取り付けています。

*写真は、購入した市販品

センサーライトの設置へ


Voice Kit

2017年12月26日、2018年 7月17日追記

最近”スマートスピーカー”が話題になっている。RaspberryPiにGoogle AssistantAPIを入れてそれに近いことができるというので、マイク・スピーカーをつないで遊んでいた。
Googleから”Google AIY Voice Kit”なるものが売りに出され、”Google Home”と同じようなことができるというし、日本での先行発売もされるというニュースを目にし、早速購入した。
RaspberryPi3Bも必要だということだったが、手持ちの3Bの調子が今一なので、思い切ってもう一台購入した。
結構簡単に組立ができ、いろいろ遊んでいる。Google Home miniのような使い方ができるのかと思っていたが、日本語での対応という点で、ちょっと違っていたのは残念だったが、これはこれでいろいろ楽しめそうだ。

(2018.7.17追記)Google-Assistant-SDKの日本語化が実行されたのを機に、自動起動化も実施。ハンズフリーのGoogle Homeもどき品が出来上がった。

Voice Kitの製作へ


シェアする

  • このエントリーをはてなブックマークに追加

フォローする