Freenove ESP32-WROVER Board CAMを購入しました。その2

次はカメラの動作を確認します。

ESP32のカメラモジュールの動作を確認するためには、いくつかのステップを踏む必要があります。以下に一般的な手順を示しますが、具体的な手順は使用しているカメラモジュールとプログラミング環境に依存します。

  1. カメラモジュールの接続を確認する:
    • カメラモジュールがESP32ボードに正しく物理的に接続されているかを確認してください。
    • ピン配列を再確認し、カメラモジュールが正しいピンに接続されていることを確認してください。
  2. ライブラリとドライバをインストールする:
    • 使用している開発環境に必要なライブラリやドライバをインストールします。Arduino IDEを使用している場合は、ESP32のカメラを扱うためのライブラリをインストールする必要があります。
  3. サンプルコードを試す:
    • 多くの開発環境にはカメラモジュールの動作を確認するためのサンプルコードが用意されています。これを使って、基本的な動作をテストすることができます。
    • サンプルコードをボードにアップロードし、シリアルモニターまたは指定されたIPアドレスをウェブブラウザで開いて、カメラの映像を確認します。
  4. 動作確認:
    • サンプルコードが正常に動作すれば、カメラが写真を撮影したり、ビデオストリームを送信したりできるはずです。
    • ウェブインターフェースやアプリケーションを通じて、カメラの映像が表示されるかどうかを確認してください。
  5. トラブルシューティング:
    • もしカメラが期待通りに動作しない場合は、トラブルシューティングが必要になります。
    • カメラの電源供給が適切か、接続ピンに問題がないか、ソフトウェアの設定が正しいかなど、一つ一つ確認していきます。

最大1310720バイトのフラッシュメモリのうち、スケッチが247221バイト(18%)を使っています。 最大327680バイトのRAMのうち、グローバル変数が21040バイト(6%)を使っていて、ローカル変数で306640バイト使うことができます。 esptool.py v4.5.1 Serial port COM1 Connecting……………………………….. A fatal error occurred: Failed to connect to ESP32: No serial data received. For troubleshooting steps visit: https://docs.espressif.com/projects/esptool/en/latest/troubleshooting.html Failed uploading: uploading error: exit status 2

「Failed to connect to ESP32: No serial data received」というエラーメッセージは、ESP32デバイスとコンピュータ間の通信に何らかの問題があることを示しています。このエラーを解決するためには、いくつかのトラブルシューティングのステップを実行する必要があります。

以下に、問題解決のための一般的なステップをいくつか紹介します:

  1. シリアルポートを確認:
    • コンピュータに接続されている正しいシリアルポートが選択されているか確認してください。Arduino IDEなどの開発環境でポートをチェックします。
  2. USBケーブルを確認:
    • USBケーブルがきちんと接続されていること、または壊れていないことを確認します。必要であれば、異なるUSBケーブルを試してみてください。
  3. ドライバを確認:
    • ESP32をコンピュータに接続するための適切なドライバがインストールされていることを確認します。CP210xやCH340などのドライバがよく使われます。
  4. ESP32ボードのリセット:
    • アップロードが開始する直前にESP32のリセットボタンを押すことで、アップロードモードに入ることができます。
  5. ブートモード:
    • ESP32が正しくブートモードに入っているかを確認します。IO0をGNDに接続してからリセットすることでブートモードに入ります。
  6. PCやIDEの再起動:
    • コンピュータや開発環境の再起動で問題が解決する場合もあります。
  7. 開発ボードの交換:
    • ESP32ボード自体に問題があるかもしれません。可能であれば別のボードで試してみてください。

USBをPCへ挿すとドライバが自動的にインストールされます。IDE側が認識するまで数分時間がかかりました。COM1しかなかったところ、COM3が新しくリストに出てきたので選択したところ問題なく動きました。

ひとまずPCを変えたのでLED点滅の確認。

 

ESP32-CAMを使用してカメラの映像を取得し、それを確認するプロセスはいくつかのステップに分けられます。以下は、基本的なガイドラインです。

必要なもの

  • ESP32-CAMボード
  • USB to Serialコンバータ(ボードをプログラムするため)
  • カメラがボードに接続されていること
  • Arduino IDEまたはその他のプログラミング環境

ステップ

  1. Arduino IDEのセットアップ
    ESP32のサポートをArduino IDEに追加します。Arduino IDEの「ファイル」→「環境設定」で「追加のボードマネージャのURL」にESP32のURLを追加します。
  2. ボードの選択
    ツール→ボード→ボードマネージャで「ESP32」を検索し、インストールします。その後、ボードリストからESP32 Wrover Moduleを選択します。
  3. カメラサンプルのロード
    ファイル→例→ESP32→Camera→CameraWebServerを開きます。
  4. 設定のカスタマイズ
    スケッチ内のWIFI_SSIDWIFI_PASSWORDを適切なものに変更します。
  5. ボードへのアップロード
    適切なCOMポートを選択し、アップロードします。
  6. シリアルモニタの使用
    ボードがリセットされた後、シリアルモニタを開き、IPアドレスを探します。そのIPアドレスにWebブラウザでアクセスすると、カメラの映像を確認できるはずです。

もしカメラの映像が見られない場合、いくつかのトラブルシューティングを試みる必要があります。配線の確認、ボードのリセット、電源の供給などの基本的なことから始めてみてください。また、使用するカメラモデルに合わせてスケッチ内のカメラモデル設定を適切に選択することも忘れないでください。

このプロセスがうまく行くと、カメラの映像をWebブラウザでリアルタイムに見ることができるようになります。もしステップごとの詳しい説明や、具体的なコード例が必要な場合は教えてください。

 

Wi-FiネットワークのSSID(Service Set Identifier)とパスワードを見つけるには以下の方法を試すことができます。

SSIDを見つける方法:

  1. Wi-Fiルーターをチェック: 多くのルーターにはSSIDが記載されているステッカーが貼られています。
  2. 既に接続されているデバイスをチェック: スマートフォンやPCなど、既にネットワークに接続されているデバイスで利用可能なネットワークのリストを表示し、SSIDを探します。
  3. ルーターの管理ページにアクセス: ブラウザからルーターのIPアドレスにアクセスし、ログインしてSSIDを確認します。

パスワードを見つける方法:

  1. ルーターをチェック: ルーターのステッカーにパスワードが記載されていることがあります。
  2. 既に接続されているデバイスを利用: 一部のデバイスでは、セキュリティ設定で保存されたWi-Fiパスワードを表示するオプションがあります。
  3. ルーターの管理ページ: ブラウザからルーターの管理ページにアクセスし、Wi-Fiのセキュリティ設定でパスワードを確認または変更できます。
  4. ルーターのマニュアルを確認: マニュアルにデフォルトのパスワードが記載されていることがあります。ただし、セキュリティ向上のために変更されていることが多いです。
  5. リセット: 他の方法が使えない場合、ルーターを工場出荷時の状態にリセットするとデフォルトのSSIDとパスワードが適用されます。この操作は、ルーター上のリセットボタンを使って行いますが、この方法では全ての設定が失われるので注意が必要です。

安全を保つために、パスワードは他人と共有しないようにし、不明なデバイスからのアクセスがないように管理することが重要です。また、パスワードを変更する際は、十分な強度のあるものにすることをお勧めします。

 

提供されたコードは、ESP32カメラモジュールをセットアップしてWi-Fiネットワークに接続し、カメラサーバーを起動するためのものです。映像を確認するには、以下の手順を実行します。

  1. シリアルモニタを確認する: ESP32デバイスがWi-Fiに接続されると、シリアルモニタにローカルIPアドレスが表示されます。このIPアドレスは、デバイスがローカルネットワーク内で使用しているアドレスです。もし、IPアドレスがシリアルモニタに表示さらない場合は、シリアルモニタのボーレート(通信速度)がコードに設定されている値と一致していることを確認します。コードでは Serial.begin(115200); と設定されているので、シリアルモニタも115200に設定する必要があります。設定を変更したら再度書き込みをします。
  2. ウェブブラウザを使用する: コンピューターやスマートフォンのウェブブラウザを開き、シリアルモニタに表示されたIPアドレスをURLバーに入力します。例えば、IPアドレスが 192.168.1.10 だった場合、ブラウザに http://192.168.1.10 と入力します。
  3. カメラインターフェースにアクセスする: 正しいIPアドレスをブラウザに入力すると、ESP32カメラのウェブインターフェースにアクセスできます。このインターフェースを通じて映像を見ることができるだけでなく、カメラ設定を変更したり、写真を撮ったりすることも可能です。

Freenove ESP32-WROVER Board CAMを購入しました。

FreenoveのESP32-WROVERボードは、さまざまな電子プロジェクトや教育目的でよく使用されるマイクロコントローラーボードです。このボードはESP32チップセットを搭載しており、Wi-FiとBluetoothの機能を内蔵しています。Freenoveは通常、そのようなボードとともに詳細なチュートリアルやプロジェクトガイドを提供しているので、プログラミングや電子工学の初心者にも扱いやすいです。

 

アップロードされた画像

画像に写っているのはFreenoveのESP32-WROVERボードとUSBケーブル、そして小型のカメラモジュールです。ESP32-WROVERはWi-FiとBluetoothを内蔵した強力なマイクロコントローラで、さまざまなIoT(モノのインターネット)アプリケーションに適しています。このボードには、外部機器やGPIOピンを接続するための複数のインターフェースがあります。

同梱されているカメラモジュールが示しているように、このキットは画像の取得や処理に関わるアプリケーションに使用することができます。これには、自宅の監視カメラ、QRコードリーダー、AIを組み込んだ物体認識タスクなどの進んでいて興味深いプロジェクトが含まれます。

このボードを使用するには以下の手順を通常踏みます:

  1. USBケーブルを使ってコンピュータに接続します。
  2. Arduino IDEやEspressifのESP-IDFなど、必要なドライバと開発環境をコンピュータにインストールします。
  3. 開発環境を設定して、ESP32-WROVERボードを認識させます。
  4. カメラや他の接続されたセンサーやデバイスを制御するためのファームウェアでボードをプログラミングし始めます。

FreenoveのESP32-WROVERボードとカメラモジュールの使用を開始するための手順を詳しく説明します。

1. ハードウェアの接続

  • ESP32ボードをコンピューターにUSBケーブルで接続します。
  • カメラモジュールをボードのカメラインターフェースに接続します。

2. 開発環境の準備

  • Arduino IDEをダウンロードしてインストールします。(Arduino公式サイトから入手できます。)
  • Arduino IDEを起動し、[ファイル] > [環境設定] で「追加のボードマネージャのURL」にESP32のボードマネージャのURLを追加します。
    • 通常は https://dl.espressif.com/dl/package_esp32_index.json を使用します。
  • [ツール] > [ボード] > [ボードマネージャ]を開き、「ESP32」と検索して、出てきたリストからESP32 by Espressif Systemsをインストールします。

3. ボードとポートの選択

  • ツールメニューからボードを「ESP32 Wrover Module」に設定します。
  • 正しいCOMポートを選択します(Windowsの場合は「COMx」と表示され、Macの場合は「/dev/cu.xxxxx」と表示されます)。どれがESP32ボードに割り当てられているかは、ボードを接続してArduino IDEの[ツール] > [ポート]を見ることで確認できます。

4. プログラムの書き込み

  • サンプルプログラムを開きます。[ファイル] > [サンプル] > [ESP32] > [Camera]などから、カメラを使用するサンプルプログラムを選ぶことができます。
  • サンプルプログラムをボードに合わせて必要に応じて修正します。例えば、Wi-Fi設定やカメラモジュールのピン設定などがあります。
  • プログラムをボードにアップロードします。[スケッチ] > [アップロード]を選択するか、ツールバーの右矢印のアイコンをクリックします。

5. シリアルモニタの使用

  • プログラムによっては、シリアルモニタを通じてボードからの出力を見る必要があるかもしれません。[ツール] > [シリアルモニタ]を開いて確認します。

6. カメラの動作確認

  • サンプルプログラムがカメラの映像をウェブサーバーにストリーミングするものであれば、ボードが提供するIPアドレスにウェブブラウザからアクセスして映像を確認します。

トラブルシューティング

  • もしプログラムのアップロードやボードの動作に問題がある場合は、エラーメッセージを確認してトラブルシューティングの手順を行います。ボードが認識されない、アップロードに失敗するなどの問題が起きた時は、ドライバの問題やUSBケーブルの問題など様々な原因が考えられます。

 

このメッセージは、ESP32へのスケッチのアップロードが成功したことを示しています。ここで表示されているのは、プログラム(スケッチ)がフラッシュメモリに書き込まれ、その後、書き込まれたデータが検証されたというプロセスのログです。

プロセスの要点をまとめると以下の通りです:

  1. esptool.py:これはESP32ボードにスケッチをアップロードするために使われるPythonスクリプトです。
  2. COMポートの確認:シリアルポートが認識され、COM6が使用されています。
  3. ボードの情報の取得ESP32-D0WD-V3 チップの詳細な情報が取得され、この情報にはクリスタルの周波数やMACアドレスも含まれています。
  4. スタブのアップロード:アップロードプロセス中に使用される一時的なプログラムであるスタブがボードにアップロードされています。
  5. ボーレートの変更:アップロードの速度を上げるために、ボーレートがデフォルトから921600に変更されています。
  6. フラッシュサイズの設定:アップロードするプログラムのサイズに基づいてフラッシュメモリのどの部分を消去するかが設定されています。
  7. データのアップロード:様々なセクションへのデータの書き込みが成功し、それぞれのセクションのハッシュが検証されています。
  8. アップロード完了とリセット:全てのデータのアップロードが終了し、ボードはハードリセットを行っています。

このログによれば、アップロードは正常に完了しており、ESP32ボードはリセットされて通常通り動作する準備が整っています。これであなたのスケッチがESP32デバイス上で実行されるはずです。プログラムが意図したとおりに動作しているかを確認するためには、シリアルモニタを開いて出力を確認するか、その他のデバッグ手段を用いる必要があります。

LEDをArduinoに接続する基本的な方法は次のとおりです:

  1. LEDの極性を確認する: LEDにはアノード(長い足、プラス側)とカソード(短い足、マイナス側)があります。
  2. 抵抗を使用する: LEDを直接Arduinoのピンに接続すると、過剰な電流でLEDが壊れる可能性があります。そのため、適切な抵抗(一般的には220Ωから1kΩ)をシリーズに接続して電流を制限します。
  3. 接続:
    • アノード(長い足)をArduinoのデジタル出力ピンに接続します。サンプルコードではピン9を使用していますが、他のPWMが使えるピンでも構いません。
    • カソード(短い足)を抵抗に接続し、抵抗のもう一端をArduinoのGNDピンに接続します。
  4. コードをアップロードする: Arduino IDEから提供されたサンプルコードをアップロードします。
  5. 動作確認: Arduinoに電源を供給すると、LEDがフェードイン(明るくなる)とフェードアウト(暗くなる)を繰り返すはずです。

LEDの極性を間違えてしまうと、LEDは光りません。その場合は、LEDの足を逆にして再度試してみてください。また、使用する抵抗の値はLEDの仕様と使用する電源の電圧によって異なるため、LEDのデータシートを確認するか、オームの法則を使用して計算してください。

 

アップロードされた画像

画像には、Freenove ESP32-WROVER-CAM開発ボードのピンアウト図が示されています。この図は、各GPIOピンの機能を詳細に説明しており、アナログからデジタルへの変換機能(ADC)、デジタル入出力(GPIO)、シリアル通信(I2C, SPI)、PWM出力などの機能を持つピンを識別するのに役立ちます。

もしGPIO0(表記はIO0ともされます)が利用できない場合、このピンアウト図に基づいて他のピンを選択できます。アナログ入力が必要な場合は、ADC1_CH0からADC1_CH7またはADC2_CH0からADC2_CH9までのいずれかのピンを使用できます。ただし、ESP32ではADC2チャンネルがWi-Fi機能と共有されているため、Wi-Fiを使用しているときはADC2チャンネルをアナログ読み取りに使用することはできません。

もしGPIO0の代わりに別のデジタルピンが必要な場合は、ピンアウト図からGPIO1からGPIO39までの範囲のいずれかのピンを選ぶことができます(ただし、ピンの中には入力専用や特定の機能に予約されているものもあります)。

 

次回はカメラを試してみます。

ネットが遅いとき windows10

光回線を契約しているのに何故かネットが遅いとき。

fast.comで調べてみると 90Mbpsくらいしか出ていない。

おそらくそれ、設定がおかしいです。

コントロールパネル>ネットワークとインターネット>ネットワーク接続

の中にイーサネットアイコンがあるので開いてみましょう。

イーサネットの状態>全般>接続 が速度=100Mbpsになっていませんか?

イーサネットの状態>全般>動作状況>プロパティ を開きましょう

ネットワーク>接続の方法>構成 をおして

詳細設定>プロパティ>速度とデュプレックス>値

が「オートデュプレックス」とか「100Mbps全二重通信」になっていたら、これがおかしいのです。

1.0Gbps全二重通信に変更しましょう。

これでOKです。

もういっかいfast.comで速度を確認してみてください。数百Mbpsに跳ね上がっているはずです。

もし、それでもだめな場合は、同じプロパティの中の省電力関係の項目をオフにしてみてください。

以上

 

 

 

 

ラズパイ4:ディスプレイに繋げない状態でVNC接続する方法

ラズパイ4をディスプレイにつないでいない状態の場合では、VNC接続しても画面が表示されません。

/boot/config.txt ファイルの中にhdmiの設定があるので

sudo nano /boot/config.txt で内容を確認して

hdmi_force_hotplug=1 の部分のコメントアウト「#」を削除して、有効化しましょう。

最後に、 sudo reboot すると、以後ディスプレイが接続されていなくてもVNC接続できるようになります。

FT232HとI2Cデバイスの複数接続(MPU-6050)

前回に引き続き

Windows10でPythonから加速度センサMPU-6050を動作させる

I2Cの複数接続をやってみます。

接続方法

2つ目のMPU-6050を接続する場合は2つ目のMPU-6050のVCCには何も入れず、代わりにADO(データアウト)へ対して+5Vを入れるとI2アドレスが0x69になってくれます。よって、スクリプトでは1つ目が0x68, 2つ目が0x69として値を渡してあげればよいのです。※データシートを熟読できていないので、もしかしたら、+3.3Vが正しいのかもしれません。

スクリプト

ポイントは、インスタンスを作るときにI2Cアドレスを引数として指定することです。ここだけです。

mpu1 = adafruit_mpu6050.MPU6050(i2c, address=0x68)

mpu2 = adafruit_mpu6050.MPU6050(i2c, address=0x69)

 

Windows10でPythonから加速度センサMPU-6050を動作させる

前回、Noobsが入ったラズベリーパイ3のGPIOピンを使ってI2C接続を試み、見事成功いたしました。

今回は、普段から使っているWindows10のモバイルPCでMPU-6050を動かせないか検討しました。

モバイルPCで一般的な入出力といえばUSBなので、これをGPIO的な何かに変換できれば行けるだろうという思惑です。

FT232H使用 USB⇔GPIO+SPI+I2C変換モジュール

http://akizukidenshi.com/catalog/g/gM-08942/

探した結果、こんなんがありました。Adafruit(エイダフルート)の変換モジュールです。下の方に「メーカー資料」とありますので、クリックしてみると。

https://learn.adafruit.com/adafruit-ft232h-breakout/mpsse-setup

いきなり現れる「非推奨」の文字!

どうやらPython2でやり方を書かれている古い情報のようです。

大丈夫です、代替方法が用意されてありました。

BLINKAとサーキットPythonライブラリ

https://learn.adafruit.com/circuitpython-on-any-computer-with-ft232h

これによると、Python3の他にBLINKAとCIRCUIT_PYTHON なるソフトウェアが必要だそうです。

sensors_board_ft232h.png

FT232HをUSBへ認識させる

※実は、この項目は必要ないかもしれません。後述するBLINKAなどのセットアップが終わりテストスクリプトを走らせたあと、気がついたら、ここで行ったことがなかったことになっていました。しかしちゃんと動いています。参考までに残しておきます。↓↓↓

https://www.ftdichip.com/Drivers/VCP.htm

とその前に、先にこれをやらないといけません。基本的にはFT232H側マイクロUSB~PC側USB とケーブルで接続すれば勝手に認識されます。

確認方法は、デバイスマネージャーを開いてポート(COMとLPT)の直下に新しいCOMx(xは数字)が作成されていればOKです。またポートと同層にあるユニバーサルシリアルバスコントローラーの直下にUSBコンバーターが作成されていればOKです。この詳細設定でVCPをONにしなければ動かない場合があるそうなので念の為ONにしておきます。

うまくいかない場合。

まず、ちゃんと正常なマイクロUSBケーブルを用意します。

これが今回最も手こずった所です。マイクロUSBは少し前のスマホでよく使われていましたが、今はUSB-Cに取って代わられています。マイクロUSBの致命的な欠点はその接触の悪さです。

一本目はナイロンで保護されている高級そうなケーブルで試してみました。「ピロポン♪↑」というUSB認識の音がなり、デバイスマネージャーを確認すると勝手にドライバーが入る手はずなのですが、COMとして認識された瞬間に接続が切れ、何回接続し直したりrebootしたりしても改善されません。

他のケーブルを試してみましたが、電源のみのケーブルというのも混在しており見分けが付きません。電源LEDは点灯すれどもUSB接続の「ピロポン♪」という音がなりません。これを3本ほどやりました。ぐぬぬぅ・・・。

さらに、ケーブルを替えてうまく認識されたと思いきや、1時間作業後に再び切れ、FT232Hの電源LEDすら点灯しなくなるという事態になりました。

(電源線を間違えてFT232Hが壊れたか・・・。OTZ)

結果、そんなことはありませんでした。奇跡的に見つけた最後のケーブルを使うと、なんの問題もなくプラグアンドプレイできてるじゃないですか。

ちゃんと正常なマイクロUSBケーブルを用意しましょう。

それでもプラグアンドプレイできないときは、https://www.ftdichip.com/Drivers/VCP.htm

のwindows セットアップ実行ファイルでインストールしましょう。

Windowsへのセットアップ

 

https://learn.adafruit.com/circuitpython-on-any-computer-with-ft232h/windows

このページの通りにざーっとやると良いです。Python3はAnaconda3とかでなく素の状態で入れました。バージョンは3.7.7。

ZadigでFT232Hを接続してドライバーを修正

FT232Hデバイス用のlibusbドライバーを簡単にインストールするツールです。 ※これをやるから、前項が必要なくなる?

ツールを実行する前に、コンピュータからすべてのFTDIデバイスを取り外します

FT232Hだけを接続して、PCに接続されている唯一のFTDIデバイスになるようにします。

オプション ]メニューをクリックし、以下の[ すべてのデバイスをリスト ] 項目を選択します。

FTDIBUSに等しいドライバーと0403 6014に等しいUSB IDを持つデバイスを選択してください!

USB Serial Converter > FTDIBUS(v2.12.28.0)

libusb-win32(v1.2.6.0)

0403 6014 にして Replace Driverボタンをおします。

デバイスマネージャーを開くとlibusb-win32 devices とその直下にUSB Serial Converterが出来上がっています。

pyftdiとpyusbをアンインストールしてからインストールする

まず、以前にpyusbとpyftdiを入れてしまっている可能性がある場合はアンインストールしておきましょう。

$ pip uninstall pyusb

$pip uninstall pyftdi

Windowsに影響するバグを修正するには、pyusbのフォークを取得します。

$ git clone https://github.com/minkustree/pyusb.git

gitでエラーが出たときは

https://git-scm.com/download/win

で、gitをインストールします。

PowerShell管理者モードを再起動させてから、今一度

$ git clone https://github.com/minkustree/pyusb.git

です。

$ cd pyusb

$ pip install pyftdi

で、インストールが完了です。

pyusbとpyftdiをテストする

FT232Hを接続しておいた状態で

これで DEVICE IDが出てくればOKです。

 

Adafruit Blinkaをインストールする

$ pip install adafruit-blinka

環境変数を設定

PowerShell管理者権限で入っている場合は

$とenvにはスペースを入れない状態で

$env:BLINKA_FT232H=1

cmdなら

set BLINKA_FT232H=1

です

プラットフォーム検出確認

 

python3を起動して

 

で、エラーが発生せず、利用可能なすべてのピンのリストが表示される場合は、準備完了です。

 

インストール後のチェック

https://learn.adafruit.com/circuitpython-on-any-computer-with-ft232h/troubleshooting

 

python3で

とやって

ならOKです

Python環境変数の確認

import os
os.environ[“BLINKA_FT232H”]

数字が返ってくればOK ’1’など。

import board

エラーが出なければOK。

ピン配列を確認

https://learn.adafruit.com/circuitpython-on-any-computer-with-ft232h/pinouts

電源ピン

5V-これはUSB入力からの5V電源です。

GND-これは、すべての電源とロジックに共通のグラウンドです。

3V電源出力 – 新しいバージョンには、最大500mAの3.3V電源出力ピンがあります

GPIOピン

D4にD7は -デジタル入力または出力のいずれかとして使用することができます。C0へC7は -デジタル入力または出力のいずれかとして使用することができます。

I2Cピン

FT232HとMPU6050とのI2C接続です。D1とD2を短絡させる必要がありました。

SCL -I2Cクロック信号はD0にあります。

SDA -I2CデータはD1   D2にあります。

I2Cスイッチ – 新しいバージョンには、D1とD2を接続してI2Cインターフェースを容易にするスイッチがあります。

I2CやSTEMMA QTコネクタを使用するには、スイッチをONに動かします。その後、SDAにD1またはD2を使用できます。

元のバージョンのみ:I2Cを使用するには、2つのピン(D1とD2)があることに注意してください。

SPIピン

FT232HとMPU9250/6500のSPI接続(のはず)です。まだ動かすことができていません。

SCLK -SPIクロック信号はD0にあります。
MOSI-マスター出力、スレーブ入力はD1にあります。
MISO-マスター入力、スレーブ出力はD2にあります。
CS0-チップセレクトはD3にあります。これはBlinkaでは使用されず、代わりに上からGPIOピンの1つを使用します(例のセクションを参照)。

 

MPU6050用 Pythonモジュールのインストール

https://pypi.org/project/adafruit-circuitpython-mpu6050/

 

スクリプト

結果出力

今後について

I2Cデバイスの複数接続

MPU-6050がまだ3つほどあるのでチャレンジします。

FT232HとI2Cデバイスの複数接続(MPU-6050)

SPI通信

本当はこっちをやりたかった。

MPU-9250/6500を購入しましたが、いい感じのライブラリとか知らないのでどうしたものか悩んでいます。

SPIデバイスの複数接続

最終的な目標。

MPU-9250/6500を2個購入しましたので、なんとしてもやりきりたいです。

 

以上、まだまだ続きます。

 

追記1

PowerShell管理者権限で入らないと実行できません。

PowerShellをリブートしたら、同じスクリプトなのに実行できませんでした。

 

PowerShell管理者権限で入って

$env:BLINKA_FT232H=1

をすると、何事もなく実行できました。一体なんでしょう・・・?

 

 

追記2

PowerShellで管理者権限でない状態でスクリプトを実行するとimport boardが機能しないことがわかっています。

boardモジュールがないのでインストールしてくださいというエラーメッセージの通りに pip install boardを行うとインストールできますが、機能しません。board.なんちゃらはメソドを持っていませんというエラーがでるので、別物のboardではないでしょうか?。

pip uninstall boardして管理者権限に移行して、追記1の通り$env:BLINKA_FT232H=1 をしてからスクリプトを実行したところ、実行されません。先程pip uninstall boardしたことで何かがおかしくなってしまったのでしょうか。

解決策としては、ずーっと前まで戻って

$ pip uninstall adafruit-blinka

$ pip install adafruit-blinka

することで、再度import boardできるようになりました。

まだ理屈がわかってません。

アンドロイドスマホをwebカメラにする方法

webカメラを買おうか迷っているあなた!

スマホで代用しませんか?

注意:モバイルwifi 7GB/月契約のやつを使用したら、十数秒で1GB程度消費しました。怖!

使用するときは必ず上限のないwifi(家のやつとか)でやりましょう。

スマホには↓をインストールする

windowsには

https://play.google.com/store/apps/details?id=com.dev47apps.droidcam

から↓を押してインストールする

スマホのアプリを立ち上げるとIPが出てきますので

Windowsアプリを立ち上げると出てくるIPの中に入力します。

19.168.10.xxx とかです。

 

こちらを参考にさせていただきました。

https://www.madosyo.com/?p=2270#toc5

IOT:加速度センサMPU-6050をラズパイ pythonで動かしてみる(2)

前回は、数値の出力まででしたので、今回はリアルタイムプロットに挑戦します。

グラフ付きスクリプト

リアルタイムプロット

できました! 以上です。

IOT:加速度センサMPU-6050をラズパイ pythonで動かしてみる(1)

こんにちは、加速度センサーのMPU-6050を買ったので、試運転してみます。

下記webを参考にさせていただきました。

 

まずは配線しましょう。

使用するピンは 1 , 3 , 5 , 6 です。

MPU-6050の電源電圧は 3.3[V] ですが、GY-521に3.3[V]のレギュレータICが載っていて、I2Cバスのプルアップ抵抗が 3.3[V] へ繋がっているので、5[V]電源の Arduino に直接つないで使うことが出来ます。

という記述を見つけましたが、おとなしく+3.3Vに接続します。

ラズパイをネットワークにつないでVNC接続します。

ラズパイの設定でSSH,VNC,I2C,SPIとか全部 有効にします。

ターミナルで >ifconfigして アドレスを確認します。

192.168.10.xxx

ウィンドウズマシン上でVNC Viewerから新規コネクト作成で192.168.10.114します。

このとき、重要なのは ユーザーネームは自分で設定したIDではなくて pi です!!で、パスワードは自分で設定したやつです。

非常に紛らわしいですね。毎回詰まります。

GPIOでI2Cが有効になっているか確認

$ gpio readall

すると、GPIOの一覧が確認できます。

 

$ sudo i2cdetect -y 1

すると、I2Cが接続されているのが確認できます。

実行スクリプト

では、加速度を取得してみましょう。ベタ貼りしてみました。

 

結果

ちゃんと動いていますね。

次回

数値データをグラフ化して見ましょう。

動的にmatplotlibを利用する必要がありますので、ちょっと考えなくてはなりません。

IOT:速くて軽い MQTTプロトコル

こんにちは、Keita_Nakamori(´・ω・`)です。

みなさんIOTしていますか?

今日はIOTで流行っている通信プロトコルであるMQTTについてやっていこうと思います。

なぜMQTTか

OASISという規格団体において、軽い、公開、単純、簡単に使えるというコンセプトで設計されたプロトコルです。

従来のHTTPプロトコルは人と人がコンピューターを介してコミュニケーションを取ることが前提となっており、1つのコンテンツで多くの情報をやり取りしています。

しかし、IOTの場合は莫大な数のIOTデバイスと接続することになりますので、速くて軽いプロトコルである、”MQTTプロトコル”を使いこなしていく必要があります。

MQTTの特徴

すこし専門用語を出しますが、

MQTTはクライアント・サーバー間のpublish・subscribeメッセージをバイナリ(2進数)でやり取りするプロトコルです。

  • トランスポート層ではTCPをベースとます。
  • セキュリティはTLS/SSLを使用します。
  • MQTTは確実なデータ発信と重複を避けることができます。
  • 順序が決まっていてかつ可逆的な2進数情報をread/writeの両方向に対して適用されます。

MQTTの用語

peer:仲間という意味で、PCやIOTデバイスのようなサーバーではない端末のことです。MQTTクライアントとも言います。

Broker:サーバーのことです。Central MQTT BrokerとかLocal MQTT Brokerという使い方をします。

Publish:Brokerにデータを渡す。

Topic:Publishされたデータを格納する箱。encodingはutf-8。例えばAなら01000001という2進数8bitで表現されます。

Topic Level:トピックはツリー構造で格納されます。例えば

  • mytopic/machine_001/transmission_system_001/bearing_001/temperature

というように、トピックレベルセパレーターと呼ばれるスラッシュ記号で表現します。この各ディレクトリのことをトピックレベルと呼びます。

Subscribe:Broker内のTopicのデータを送ってもらうよう申し入れをします。

QoS:サービス品質 Quality of Serviceです。

レベルの低いものから

QoS_0

Publisherがメッセージを投げたらBrokerを通してSubscriberに渡す。そして、Publisherはメッセージを消す。

QoS_1

PublisherはメッセージをBrokerに投げる前に、Publisher自身がメッセージを保持する。PublisherがメッセージをBrokerに投げたら、Broker内で一旦保持してからSubscriberにわたす。渡ったらBrokerはメッセージを消して、続いてPublisherもメッセージを消す。少し複雑になりました。

QoS_2

PublisherはメッセージをBrokerに投げる前に、Publisher自身がメッセージを保持する。PublisherはメッセージをBrokerに投げたら、Broker内で一旦保持してからSubscriberにわたす。渡ったらBrokerはPUBRECをPublisherへ渡して、PUBRELが返ってきてから、Broker内のメッセージを消す。

渡ったらBrokerはメッセージを消して、PUBCOMPを渡す。

それによって、Publiserはメッセージを消す。とても長い手順を踏むことになります。

MQTTのヘッダーフォーマット

頭にヘッダー情報をつけます。ヘッダーは2バイトで構成されています。

  1. 4bitでコマンドメッセージタイプを指定します。
  2. 1bitでDUP(デュプリケート、複製)
  3. 2bitでQos Level(Quality of Service Level)
  4. 1bitでRERTAIN

これで1バイトです。

次の1バイト中最大4bitを使ってRemaining Lengthを表現します。

その次にペイロード(内容)を書いていくのですが、それはまたあとでやりましょう。