海外通販で使えるプリペイドクレジットカード

概要

電子工作などをやっているとAliExpressなどの海外サイトで通販をすることがありますが、みなさんメインクレジットカードを使っていますか?

私はちょっと怖いのでプリペイドのクレジットカードを使っています。どんなカードがいいのか悩み中ですが、現状使っているカードの紹介です。

なぜプリペイド?

AliExpressとかだと数百円の買い物を大量にしますよね?

そうすると、どれぐらいお金を使っているのかどんどんわからなくなってきます。そのため、毎月決めたお金をプリペイドにチャージして、お小遣い管理をしていました。

まあ、足りなくて追加チャージしているんですが、、、

あとは、メインのクレジットカードとかを登録すると、不正利用とかがあった場合に全部のクレジットカード情報を更新したりするのが面倒なのもあります。

そしてプリペイドのクレジットカードだと課金が発生したら、ほぼリアルタイムでわかるので、結構おすすめです。

LINE PAY

これまでメインで使っていたプリペイドのクレジットカードです。AliExpressでも使えるのですが、最近使ってもポイントがたまらなくなってしまいました(涙)

ちなみにAliExpressで使うためにはLINE PAYで本人確認をする必要があるみたいです。銀行口座を紐付けて行うのですが、本人確認後すぐに紐付けを削除することもできます。

私は毎回セブンイレブンのATMからチャージしているので、銀行経由のチャージは使っていません。LINE PAYのプリペイドクレジットカードは、無料でリアルカードも発行してくれるので非常に便利です。

とはいえ、やっぱり儲からないみたいでポイントをもらうためにはプリペイドではなく、普通のクレジットカードを作らないとだめなシステムになってしまいました。

欠点としてはJTBブランドのため、秋月電子さんで使うことができません!

こりゃ困った、、、

そして、1円決済ができないのでサイトによっては初回カード登録時にエラーがでます。海外は1ドル相当の100円ぐらい決済した直後にキャンセルが多いのですが、国内は1円がまだ残っていますね。

ただ1円決済の失敗はリアルタイムに携帯に通知がくるので、失敗した理由などがわかるのはいいところです。

Dカードプリペイド

最近使い出したプレイペイドカードです。ドコモユーザー以外でも作ることができます。auでも良かったのですが、まあDカードにしてみました。

しかしながらAliExpressで決済できません(涙)

昔は大丈夫だったのですが、最近ほとんどのプレイペイドクレジットカードでAliExpressへの決済ができないみたいです。春に某クレジットカードとかで大量の不正購入があったからかな?

Dカードプリペイドはマスターカードなので、秋月電子さんでも決済できます!

ただし、Digi-Keyさんだとエラーがでて、PayPal経由での決済が必要みたいでした。

あとドコモもプリペイドはあまりやる気がないみたいでして、履歴確認とかが通常のDカードとは別のページにあり、スマホアプリも提供されていません。

利用通知はメールできて、利用後の残高のみ記述されています。

まとめ

んー、一枚でスッキリと使えるプレイペイドは無さそうです。現状AliExpressのみLINE PAYで、それ以外はDカードプレイペイドを使っていますがちょっと面倒です。。。

M5Stack I/Oエクステンダーユニット

概要

日本未発売?シリーズです。8ポートのI/O拡張ユニットです。I2C接続でINPUTもしくはOUTPUTの指定が可能です。

いまは在庫切れでして、このままEOLになる可能性?もあります、、、

PCA9554PW

内部で利用されているチップです。

おそらく上記がデータシートです。ちょっとマイナーなチップでしてArduinoで標準的なライブラリがありません。

商品

コネクタが赤なのでI2Cですね。そしてEXT.IOと名前のブレがあるのがM5Stackの特徴です。

裏側にピンの配置が書いてあります。こっちはEXTEND I/Oになっていますね。

ピンは一般的なヘッダピンでした。

スケッチ例

#include <TCA9534.h>  // http://librarymanager/All#TCA9534 https://github.com/hideakitai/TCA9534

TCA9534 ioex;
const uint8_t IOEX_ADDR = 0x27;

void setup()
{
  Serial.begin(115200);
  delay(2000);

  Wire.begin(32, 33);

  ioex.attach(Wire);
  ioex.setDeviceAddress(IOEX_ADDR);
  ioex.config(TCA9534::Config::IN);
  //ioex.polarity(TCA9534::Polarity::INVERSE);

  Serial.print("config  : ");
  Serial.println(ioex.config(), HEX);
  Serial.print("polarity: ");
  Serial.println(ioex.polarity(), HEX);
}

void loop()
{
  for (int i = 0; i < 8; i++) {
    uint8_t raw = ioex.input(i);
    Serial.print(raw != 0);
  }
  Serial.println();
  delay(1000);
}

PCA9554PWのライブラリはありませんので、互換性がありそうなライブラリを探したところ、TCA9534が使えそうでした。

ピンごとにINPUTかOUTPUTを設定して、状態の設定と取得が可能です。使い方はシンプルですね。

まとめ

個人的には近い内にEOLになるのではと思っています。同じようなユニットとしてPbHubがあるので、あちらの方がGroveコネクタになっているので使いやすいとは思います。

ESP32の選び方(2020年7月版)

概要

ESP32を使うときの選び方ガイドです。いろいろな種類のボードがありますが、日本では使えないボードがあるので注意して選んでみてください。

DevKit

上記のような開発ボードをDevKitと呼びます。一番標準的な開発ボードになります。種類が何種類かあり、大きさやピン配置などが異なるので注意してください。

ESP32の開発元であるEspressif社より純正品が販売されています。ただし国内ではあまり出回っていませんので、Amazonなどでは互換品の開発ボードが多数販売されています。

最近は上記のようなF型で、ジャンパピンではなくソケットになっているDevKitも販売されています。

また、ESP32モジュール単品を、バネの付いている本体にはめることで使えるようになるDevKitSも販売されています。こちらはちょっと上級者向けになりますが、容量違いなどのモジュールをかんたんに使い分ける場合には便利です。

違うタイプのDevKit

Espressif社の設計したリファレンス設計のDevKitはESP32モジュールのアンテナ部が外に飛び出しています。こちらのほうがアンテナの感度は良いみたいですが、上記のように飛び出ていないタイプのボードもあります。

基本的には同じように動きますが、ボードによって無線感度が違う可能性があります。また、互換ボードの方がサイズが小さい物が多くブレッドボードに刺す場合には使いやすかったりします。

Arduino UNO型

上記のようなArduino UNOと同じサイズのボードもあります。こちらのタイプの方がブレッドボードに刺さなくても使えるので、便利なときもあります。

ピン無しボード

暫定でなにかのシステムにつけたいとか、薄く使いたい場合にはピンがついていないタイプが便利です。

このタイプであれば自分でピンソケットなどをつけたり、直接配線をはんだ付けして使うことも可能です。

液晶付き

上記のようにDevKitに近いボードで液晶が付いているタイプもあります。ただし、情報が少ないのであまりおすすめしません。

ケース、液晶、バッテリー付き

ケースに液晶、バッテリーが付いているボードです。外部接続用のピンが少ないですが、画面があるので使いやすいボードです。

M5Stack社が販売しているシリーズですが、国内代理店はスイッチサイエンスさんのため、Amazonよりは直接購入したほうがおすすめです。

おすすめはM5StickCと上記環境センサーユニットです。ケーブルでユニットと呼ばれるセンサーなどをかんたんに接続することができます。このケーブルを一本は持っていたほうがいいので、興味があるユニットをなにか同時に購入することをおすすめします。

赤外線送受信ユニットもおすすめです!

ケース付き小型

M5Stack社からは上記みたいな小さなボードも販売されています。こちらはバッテリーは内蔵していません。そのかわりラジコンなどで組み込む場合に小さいので便利です。

こちらもスイッチサイエンスさんからの購入をおすすめします。

日本で使えないボードに注意

上記のボードに関してはESP32モジュールに技適マークが表示されていませんので日本で利用することができません。購入する場合には必ず技適マークが表示されているかを確認してください。

特にカメラ付きのボードは安いのですが国内では利用できません。

日本で使えるカメラ付きボードは上記のT-CameraかM5Cameraぐらいになります。ただし、T-Cameraは複数種類が出ており、技適マークが無いボードもあります。

こっちのタイプのT-Cameraは日本では使えません。

  • M5Camera(スイッチサイエンス)

国内だと上記のM5Cameraが一番無難だと思います。また、スイッチサイエンスさんで取り扱いがある商品は技適マークがあるものだけのはずです。

おすすめ

液晶付きのM5StickCあたりと拡張ユニットとハットを少し買ってみるのがよいと思います。もっとピンがほしいと思ったらDevKit型かUNO型を追加購入。もっと大きな画面が良かったM5Stackシリーズを購入。もっと小さいのが良ければM5Stack ATOMシリーズですね。

まとめ

定番はDevKitからの入門だと思います。しかしながら画面とか加速度センサーがついているM5StickCの方がいろいろ触りやすいとは思います。

M5Stack RGB LEDユニット & LEDバー

概要

M5Stack社のユニット紹介です。RGBユニットは日本未発売?シリーズです。このユニット自体はM5GOのキットには同梱されていますが、おそらく単品販売していません。

このセットには同梱されています。よくみたら前回紹介したポテンションメーターも入っている。。。

RGBユニット

中身はこんな感じで、一般的にGroveケーブルは外側の白から使うのですが、これは内側の黄色を使っています。外側だけを使うGroveとは共存できそうですね。

使われているRGB LEDはSK6812で、ATOMなどで使われているものと一緒です。数珠つなぎに接続することができますので、このユニットも連続して複数接続することも可能です。

このように上下にコネクタがあるので、複数や他のユニットの中間に接続することができます。真ん中にある3つの窓にRGB LEDが入っています。

光らせたところです。やっぱり色ごとに明るさが違いますね。。。

LEDバー

最近日本で発売されましたLEDバーです。これ買ったのですが紹介するか悩んでいました。。。

スイッチサイエンスさんの商品ページ見てもらうとわかるのですが、商品画像にUNITと書いてあります。でもこれユニットじゃないですよね?

これが袋ですが、SKUにA035と書いてあります。つまりこれはユニットじゃなくてアクセサリーなのです!

ちなみに写真が赤、黄、緑の信号マークになっていますがRGBユニットから差し替えただけです。同じLEDが利用されているので、まったく同じコードで光らせることができます。

LEDの数を調整する必要がありますが、RGBユニットとLEDバーを接続して使うことも可能だと思います。

LEDバーは長さだけしか書いていないので、LEDの数がわかりません。10センチは15個なんですが、商品ページには100センチで144個としか表記されていません。

スケッチ例

#define FASTLED_INTERNAL  // FastLEDの警告抑制
#include <FastLED.h>      // http://librarymanager/All#FastLED https://github.com/FastLED/FastLED

#define NUM_LEDS 3        // LEDの数
#define DATA_PIN 32       // M5StickC(内側のデータ線)

CRGB leds[NUM_LEDS];      // 色データ保存用

void setup() {
  // 初期化
  FastLED.addLeds<WS2812, DATA_PIN, GRB>(leds, NUM_LEDS);
  FastLED.setBrightness(20);

  // 色をセット
  leds[0] = CRGB::Red;
  leds[1] = CRGB::Yellow;
  leds[2] = CRGB::Green;
}

void loop() {
  // 定期的に出力しないとユニットを抜いたときに再点灯しなくなる
  FastLED.show();

  delay(1000);
}

公式のスケッチ例はAdafruit_NeoPixelライブラリを利用していますが、ATOMなどと同じFastLEDで動かしてみました。

色の順番がGRBなので、初期化時にGRB設定を追加するのがポイントです。あとデフォルトだと明るすぎるのでsetBrightness()で少し暗くしたほうがいいと思います。

まとめ

RGBユニットは非常に古いユニットなのですが、まだ日本未発売です。日本で発売してもいいとは思いますが、今となっては3灯だと物足りない?

実はもう一個似たようなのがあります。。。蜂の巣状の商品でこちらもアクセサリー扱いだと思うので購入していません。

M5Stack アングルユニット(ANGLE UNIT)

概要

たぶん日本未発売ユニットシリーズです。

商品

2.6ドルの商品です。商品名からわかるようにポテンションメータです。可変抵抗のボリュームが入っていて、電圧をみてアングルを取得するユニットになります。

アナログ入力なのでM5Stackの場合はポートBに接続します。M5StickCとATOMはポートAしかないので迷わないですね。

ただこれだけでGrove端子を占領してしまうのでちょっともったいないですよね。PbHubとかを利用して、複数のアングルユニットを並べて使うとかっこいいかもしれません。

表はノブが付いているボリュームになります。このユニットの向きでポッチが上にあると0、左に270度回して右にポッチがあると4095が返ってきます。

いま初めて知ったのですが、Groveの端子の色でユニットの接続種別がわかるみたいです。

  • 黒:シングルバス(AD、DA、GPIO)
  • 赤:I2C
  • ブルー:Uart
  • 白:その他(依存)

このアングルユニットは黒なのでシングルバスですね。

I2CのPaHubはたしかにコネクタが赤かったです!

スケッチ例

const int anglePin = 33; // M5StickC

void setup() {
  Serial.begin(115200);
  delay(100);

  pinMode(anglePin, ANALOG);
}

void loop() {
  Serial.println(analogRead(anglePin));
  delay(500);
}

シンプルですね。アナログで取得するだけです。ただし、取得したデータはアナログなので数値がばらつきます。

本家のスケッチ例をみると10以上変化しない場合には画面更新しなくしています。

よく見るとピンの初期化をINPUTにしているので間違っていますね。ただanalogRead()を呼ぶと中でANALOGに設定されるので、pinMode()の設定は上書きされます。

まとめ

今回撮影ボックスを出してみましたが、照明が悪いので色飛びしていますね。。。

最近スイッチサイエンスさんが日本未発売ユニットをどんどん発売しているので、このユニットも発売されるかもしれません。

あとセンタープッシュ付きで、ポテンションメーター+ボタンだったらいろいろできて嬉しいのですが、これはポテンションメーターのみみたいですね。

M5Stack ENV Hat, ENV Unit, ENV II Unitを比べてみた

概要

ENV系のセンサーが3つ揃ったので、同時に動かして数値の変化を確認してみました。

環境

すべてのセンサーで気圧用にBMP280が入っており、同じI2CアドレスなのでPaHUBを利用して接続しています。

スケッチ

#include <DHT12.h>                            // http://librarymanager/All#DHT12                    https://github.com/RobTillaart/DHT12
#include <Adafruit_BMP280.h>                  // http://librarymanager/All#Adafruit_BMP280_Library  https://github.com/adafruit/Adafruit_BMP280_Library
#include <Adafruit_SHT31.h>                   // http://librarymanager/All#Adafruit_SHT31           https://github.com/adafruit/Adafruit_SHT31
#include <SparkFun_I2C_Mux_Arduino_Library.h> // http://librarymanager/All#SparkFun_I2C_Mux         https://github.com/sparkfun/SparkFun_I2C_Mux_Arduino_Library

// ENV HAT
DHT12 DHT_env_hat(&Wire1);
Adafruit_BMP280 bmp_env_hat(&Wire1);

// PaHUB Unit
const int PaHub_I2C_ADDRESS = 0x70;
QWIICMUX i2cMux;

// ENV Unit
#define ENV_CH 1
DHT12 DHT_env_unit(&Wire);
Adafruit_BMP280 bmp_env_unit(&Wire);

// ENV2 Unit
#define ENV2_CH 2
Adafruit_SHT31 sht3x = Adafruit_SHT31(&Wire);
Adafruit_BMP280 bmp_env2_unit(&Wire);

void setup() {
  Serial.begin(115200);
  delay(1000);

  // Hat
  Wire1.begin(0, 26);
  if (!bmp_env_hat.begin(0x76)) {
    Serial.println("HAT: Could not find a valid BMP280 sensor, check wiring!");
  }

  // Unit
  Wire.begin(32, 33);
  i2cMux.begin(PaHub_I2C_ADDRESS, Wire);

  // ENV Unit
  i2cMux.setPort(ENV_CH);
  if (!bmp_env_unit.begin(0x76)) {
    Serial.println("ENV: Could not find a valid BMP280 sensor, check wiring!");
  }

  // ENV2 Unit
  i2cMux.setPort(ENV2_CH);
  if (!sht3x.begin(0x44)) {
    Serial.println("ENV2: Could not find a valid SHT3X sensor, check wiring!");
  }
  if (!bmp_env2_unit.begin(0x76)) {
    Serial.println("ENV2: Could not find a valid BMP280 sensor, check wiring!");
  }
}

void loop() {
  // ESP32
  Serial.print(temperatureRead(), 2);
  Serial.print(",\t");

  // ENV HAT
  DHT_env_hat.read();
  Serial.print(DHT_env_hat.getTemperature(), 2);
  Serial.print(",\t");
  Serial.print(DHT_env_hat.getHumidity(), 2);
  Serial.print(",\t");
  Serial.print(bmp_env_hat.readTemperature());
  Serial.print(",\t");
  Serial.print(bmp_env_hat.readPressure());
  Serial.print(",\t");

  // ENV Unit
  i2cMux.setPort(ENV_CH);
  DHT_env_unit.read();
  delay(30);
  Serial.print(DHT_env_unit.getTemperature(), 2);
  Serial.print(",\t");
  Serial.print(DHT_env_unit.getHumidity(), 2);
  Serial.print(",\t");
  Serial.print(bmp_env_unit.readTemperature());
  Serial.print(",\t");
  Serial.print(bmp_env_unit.readPressure());
  Serial.print(",\t");

  // ENV2 Unit
  i2cMux.setPort(ENV2_CH);
  delay(30);
  Serial.print(sht3x.readTemperature(), 2);
  Serial.print(",\t");
  Serial.print(sht3x.readHumidity(), 2);
  Serial.print(",\t");
  Serial.print(bmp_env2_unit.readTemperature());
  Serial.print(",\t");
  Serial.print(bmp_env2_unit.readPressure());
  Serial.print(",\t");

  Serial.println();
  delay(5000);
}

PaHUBで切り替えた直後にSHT30のデータが不安定になりましたので、30ミリ秒のdelayを追加しました。PaHUBはちょっと確認してから使わないとだめですね。

5秒間隔で30分のデータを取ってみました。まずはこのスケッチを転送してから電源をOFFにして、少し時間おいてからデータを取得しています。

結果

CPUの温度は変化ありませんでした。まったく動きがないのが逆に怖いです、、、

ENV HATは動作した直後から温度が上がり始めます。動かして10分程度で3度ぐらい温度があがっていますね。他のセンサーは特に変動なしです。BMP280の温度センサーは気圧補正用なのであまり精度は高くありませんので参考値になります。

湿度ではENV HATだけが下がっています。温度が上がれば相対的に湿度も下がりますよね。。。

気圧はどれも同じ動きですね。まあ同じセンサーなのですが、HATで温度の影響受けないんですね。

精度は?

これはすみません。正しいと思われる温湿度計がありませんのでわかりません。家にある複数の温湿度計がそもそも数値結構違うんですよね。。。

まとめ

台風シーズンにむけて、気圧を測るのであればENV HATで問題なさそうです。温度を測るのであれば常に動かしっぱなしで、高めにでている温度を相対的変化で参考にするほうがいいのかな。。。

ENVユニットとENV IIユニットで精度はセンサー的には新しいENV IIの方が高いはずですが、実際のところ、校正されている温度計持っている人が検証しないとわからないです。。。

とはいえ、現在販売されているのはENV IIユニットになるので、これから購入するのであればHATよりUNITをおすすめします。

M5Stack Port A(I2C)拡張ハブユニット(PaHUB UNIT)

概要

M5Stack社のI2Cセレクタハブである、PaHUBを使ってみました。

PaHUBとは?

PaとPbの2つ同じようなHUBがありますが、PaHUBはI2Cの拡張用です。TCA9548Aが内部で利用されており、8チャンネルのセレクタとして利用できます。

デフォルトでは0x70のアドレスでTCA9548Aが動いており、利用するチャンネル番号を0から7で選択すると、0x70以外への通信が選択したチャンネルに転送されます。ハンダ付けすることでアドレスを変更でき、他のアドレスにすることで複数のPaHUBを利用することが可能です。

同じI2Cアドレスのセンサーなどを複数利用したい場合に、違うチャンネルに接続することで、切り替えながら同時に利用することができます。

PbHUBとは?

こちらはATmega328が内部に入っており、I2Cで通信することでATmega328のGPIOを利用することができます。アナログも利用できる反面I2Cでの通信ですので速度は遅いです。

HUBとは?

こちらはI2C用のハブで、並行で接続されていますので同じアドレスを利用したセンサーなどを同時に接続することができません。違うアドレスのユニットを同時に利用した場合などに使います。

公式スケッチ例

M5StickCとM5Stackのユニットの中にPaHUBというスケッチがあります。

このスケッチを見ると「ClosedCube_TCA9548A.h」というライブラリを利用しています。プロジェクトの中に埋め込んでいるので、ライブラリマネージャーから利用するように変更したいと思います。

当初ライブラリマネージャーに「ClosedCube_TCA9548A」があったので、それを使ったのですがちゃんと動きません。よく見たらこのライブラリは不完全で、スケッチ例に埋め込まれているライブラリは手が入っています、、、

この一見ライブラリを使っているように見えて、変更しているパターンはやめてほしい。。。

スケッチ例

#include <Wire.h>
#include <SparkFun_I2C_Mux_Arduino_Library.h> // http://librarymanager/All#SparkFun_I2C_Mux https://github.com/sparkfun/SparkFun_I2C_Mux_Arduino_Library

QWIICMUX i2cMux;

void setup()
{
  Serial.begin(115200);
  delay(100);

  Wire.begin(32, 33);

  if (i2cMux.begin(0x70, Wire) == false)
  {
    Serial.println("Mux not detected. Freezing...");
    while (1)
      ;
  }
  Serial.println("Mux detected");

  Serial.println("Begin scanning for I2C devices");
}

void loop()
{
  for (uint8_t channel = 0; channel < 8; channel++) {
    Serial.printf("CH%d : ", channel);
    i2cMux.setPort(channel);
    Serial.print("I2C device = ");
    for (uint8_t address = 0x01; address < 0x7F; address++) {
      Wire.beginTransmission(address);
      uint8_t returnCode = Wire.endTransmission();
      if (returnCode == 0) {
        Serial.printf("0X%X ", address);
      }
    }
    Serial.println();
  }

  delay(1000);
}

ライブラリマネージャーでTCA9548を検索して、全部みたところSparkFunさんのライブラリが良くできていました。チップは最後にAがついているのですが、このライブラリは付いていないので最初は検索に出なかったです。

QWIICMUX i2cMux;

上記で宣言をしておきます。

  if (i2cMux.begin(0x70, Wire) == false)

初期化は引数無しでも大丈夫ですが、あとで変更するときにわかりやすいように初期値を入れておきます。

    i2cMux.setPort(channel);

上記のように0から7のチャンネル番号を指定します。

CH0 : I2C device = 0X70 
CH1 : I2C device = 0X5C 0X70 0X76 
CH2 : I2C device = 0X44 0X70 0X76 
CH3 : I2C device = 0X70 
CH4 : I2C device = 0X70 
CH5 : I2C device = 0X70 
CH6 : I2C device = 0X70 
CH7 : I2C device = 0X70 

こんな感じの出力になります。CH1にENVユニット、CH2にENV IIユニットをつなげています。しかしながらENVユニットのDHT12(0x5C)がCH0だと認識したりしなかったりと微妙でした。CH1だと安定していたのでCH1に接続しています。

TCA9548Aの0x70がすべてのチャンネルで反応しています。逆に0x70以外を選択したチャンネルに転送している動きになっています。

http://librarymanager/All#SparkFun_I2C_Mux

あと、Arduino IDEで上記のURLをクリックすると、ライブラリマネージャーで「SparkFun_I2C_Mux」が検索された状態で表示されます!

SparkFun以外で使っているのはみませんが、非常に便利な機能ですね。

まとめ

ポートによって相性問題が発生してしまいましたので、事前に安定しているのかを確認してから利用したほうがいいと思います。

また、このユニットは単一のチャンネルだけではなく、複数のチャンネルを同時に送信することなども可能です。LEDを光らせるユニットなどを接続し、選択した複数のチャンネルに同時にコマンドを送ることなどができると思います。

FastLEDライブラリ解説

概要

M5Stack ATOMなどに利用されているFastLEDライブラリの使い方を調べてみました。

FastLEDとは?

定番LED制御ライブラリで、特にNeoPixel的な複数のLEDがつながっているタイプのLED制御ではよく使われています。

対応LED

  • Adafruit’s DotStars – APA102
  • Adafruit’s Neopixel – WS2812B (WS2811/WS2812/WS2813)
  • TM1809/4
  • TM1803
  • UCS1903
  • GW6205
  • LPD8806
  • WS2801
  • SM16716
  • APA102
  • P9813
  • DMX
  • SmartMatrix panels
  • LPD6803

かんたんなスケッチ例

#include "FastLED.h"
#define NUM_LEDS 60
CRGB leds[NUM_LEDS];
void setup() { FastLED.addLeds<NEOPIXEL, 6>(leds, NUM_LEDS); }
void loop() {
	leds[0] = CRGB::White; FastLED.show(); delay(30);
	leds[0] = CRGB::Black; FastLED.show(); delay(30);
}

シンプルな利用例として、上記のコードが提示されていました。60個接続されたNeoPixelをGPIO6に接続しているのかな?

LEDの数分だけCRGB構造体の配列が用意されており、色を設定してからshow()関数で反映します。

M5Stack ATOMなどはラッパー関数があるので、若干使い方が違ってきますので注意してください。

色の指定方法

FastLEDはCRGB構造体で色を指定します。

struct CRGB {
	union {
		struct {
            union {
                uint8_t r;
                uint8_t red;
            };
            union {
                uint8_t g;
                uint8_t green;
            };
            union {
                uint8_t b;
                uint8_t blue;
            };
        };
		uint8_t raw[3];
	};
(略)

一般的にはCRGB(r, g, b)のように色を指定できます。

定義済み色見本

色名設定値見本色RGB
CRGB::AliceBlue0xF0F8FF
   
F0F8FF
CRGB::Amethyst0x9966CC
        
9966CC
CRGB::AntiqueWhite0xFAEBD7
        
FAEBD7
CRGB::Aqua0x00FFFF
        
00FFFF
CRGB::Aquamarine0x7FFFD4
        
7FFFD4
CRGB::Azure0xF0FFFF
        
F0FFFF
CRGB::Beige0xF5F5DC
        
F5F5DC
CRGB::Bisque0xFFE4C4
        
FFE4C4
CRGB::Black0x000000
        
000000
CRGB::BlanchedAlmond0xFFEBCD
        
FFEBCD
CRGB::Blue0x0000FF
        
0000FF
CRGB::BlueViolet0x8A2BE2
        
8A2BE2
CRGB::Brown0xA52A2A
        
A52A2A
CRGB::BurlyWood0xDEB887
        
DEB887
CRGB::CadetBlue0x5F9EA0
        
5F9EA0
CRGB::Chartreuse0x7FFF00
        
7FFF00
CRGB::Chocolate0xD2691E
        
D2691E
CRGB::Coral0xFF7F50
        
FF7F50
CRGB::CornflowerBlue0x6495ED
        
6495ED
CRGB::Cornsilk0xFFF8DC
        
FFF8DC
CRGB::Crimson0xDC143C
        
DC143C
CRGB::Cyan0x00FFFF
        
00FFFF
CRGB::DarkBlue0x00008B
        
00008B
CRGB::DarkCyan0x008B8B
        
008B8B
CRGB::DarkGoldenrod0xB8860B
        
B8860B
CRGB::DarkGray0xA9A9A9
        
A9A9A9
CRGB::DarkGrey0xA9A9A9
        
A9A9A9
CRGB::DarkGreen0x006400
        
006400
CRGB::DarkKhaki0xBDB76B
        
BDB76B
CRGB::DarkMagenta0x8B008B
        
8B008B
CRGB::DarkOliveGreen0x556B2F
        
556B2F
CRGB::DarkOrange0xFF8C00
        
FF8C00
CRGB::DarkOrchid0x9932CC
        
9932CC
CRGB::DarkRed0x8B0000
        
8B0000
CRGB::DarkSalmon0xE9967A
        
E9967A
CRGB::DarkSeaGreen0x8FBC8F
        
8FBC8F
CRGB::DarkSlateBlue0x483D8B
        
483D8B
CRGB::DarkSlateGray0x2F4F4F
        
2F4F4F
CRGB::DarkSlateGrey0x2F4F4F
        
2F4F4F
CRGB::DarkTurquoise0x00CED1
        
00CED1
CRGB::DarkViolet0x9400D3
        
9400D3
CRGB::DeepPink0xFF1493
        
FF1493
CRGB::DeepSkyBlue0x00BFFF
        
00BFFF
CRGB::DimGray0x696969
        
696969
CRGB::DimGrey0x696969
        
696969
CRGB::DodgerBlue0x1E90FF
        
1E90FF
CRGB::FairyLight0xFFE42D
        
FFE42D
CRGB::FairyLightNCC0xFF9D2A
        
FF9D2A
CRGB::FireBrick0xB22222
        
B22222
CRGB::FloralWhite0xFFFAF0
        
FFFAF0
CRGB::ForestGreen0x228B22
        
228B22
CRGB::Fuchsia0xFF00FF
        
FF00FF
CRGB::Gainsboro0xDCDCDC
        
DCDCDC
CRGB::GhostWhite0xF8F8FF
        
F8F8FF
CRGB::Gold0xFFD700
        
FFD700
CRGB::Goldenrod0xDAA520
        
DAA520
CRGB::Gray0x808080
        
808080
CRGB::Grey0x808080
        
808080
CRGB::Green0x008000
        
008000
CRGB::GreenYellow0xADFF2F
        
ADFF2F
CRGB::Honeydew0xF0FFF0
        
F0FFF0
CRGB::HotPink0xFF69B4
        
FF69B4
CRGB::IndianRed0xCD5C5C
        
CD5C5C
CRGB::Indigo0x4B0082
        
4B0082
CRGB::Ivory0xFFFFF0
        
FFFFF0
CRGB::Khaki0xF0E68C
        
F0E68C
CRGB::Lavender0xE6E6FA
        
E6E6FA
CRGB::LavenderBlush0xFFF0F5
        
FFF0F5
CRGB::LawnGreen0x7CFC00
        
7CFC00
CRGB::LemonChiffon0xFFFACD
        
FFFACD
CRGB::LightBlue0xADD8E6
        
ADD8E6
CRGB::LightCoral0xF08080
        
F08080
CRGB::LightCyan0xE0FFFF
        
E0FFFF
CRGB::LightGoldenrodYellow0xFAFAD2
        
FAFAD2
CRGB::LightGreen0x90EE90
        
90EE90
CRGB::LightGrey0xD3D3D3
        
D3D3D3
CRGB::LightPink0xFFB6C1
        
FFB6C1
CRGB::LightSalmon0xFFA07A
        
FFA07A
CRGB::LightSeaGreen0x20B2AA
        
20B2AA
CRGB::LightSkyBlue0x87CEFA
        
87CEFA
CRGB::LightSlateGray0x778899
        
778899
CRGB::LightSlateGrey0x778899
        
778899
CRGB::LightSteelBlue0xB0C4DE
        
B0C4DE
CRGB::LightYellow0xFFFFE0
        
FFFFE0
CRGB::Lime0x00FF00
        
00FF00
CRGB::LimeGreen0x32CD32
        
32CD32
CRGB::Linen0xFAF0E6
        
FAF0E6
CRGB::Magenta0xFF00FF
        
FF00FF
CRGB::Maroon0x800000
        
800000
CRGB::MediumAquamarine0x66CDAA
        
66CDAA
CRGB::MediumBlue0x0000CD
        
0000CD
CRGB::MediumOrchid0xBA55D3
        
BA55D3
CRGB::MediumPurple0x9370DB
        
9370DB
CRGB::MediumSeaGreen0x3CB371
        
3CB371
CRGB::MediumSlateBlue0x7B68EE
        
7B68EE
CRGB::MediumSpringGreen0x00FA9A
        
00FA9A
CRGB::MediumTurquoise0x48D1CC
        
48D1CC
CRGB::MediumVioletRed0xC71585
        
C71585
CRGB::MidnightBlue0x191970
        
191970
CRGB::MintCream0xF5FFFA
        
F5FFFA
CRGB::MistyRose0xFFE4E1
        
FFE4E1
CRGB::Moccasin0xFFE4B5
        
FFE4B5
CRGB::NavajoWhite0xFFDEAD
        
FFDEAD
CRGB::Navy0x000080
        
000080
CRGB::OldLace0xFDF5E6
        
FDF5E6
CRGB::Olive0x808000
        
808000
CRGB::OliveDrab0x6B8E23
        
6B8E23
CRGB::Orange0xFFA500
        
FFA500
CRGB::OrangeRed0xFF4500
        
FF4500
CRGB::Orchid0xDA70D6
        
DA70D6
CRGB::PaleGoldenrod0xEEE8AA
        
EEE8AA
CRGB::PaleGreen0x98FB98
        
98FB98
CRGB::PaleTurquoise0xAFEEEE
        
AFEEEE
CRGB::PaleVioletRed0xDB7093
        
DB7093
CRGB::PapayaWhip0xFFEFD5
        
FFEFD5
CRGB::PeachPuff0xFFDAB9
        
FFDAB9
CRGB::Peru0xCD853F
        
CD853F
CRGB::Pink0xFFC0CB
        
FFC0CB
CRGB::Plaid0xCC5533
        
CC5533
CRGB::Plum0xDDA0DD
        
DDA0DD
CRGB::PowderBlue0xB0E0E6
        
B0E0E6
CRGB::Purple0x800080
        
800080
CRGB::Red0xFF0000
        
FF0000
CRGB::RosyBrown0xBC8F8F
        
BC8F8F
CRGB::RoyalBlue0x4169E1
        
4169E1
CRGB::SaddleBrown0x8B4513
        
8B4513
CRGB::Salmon0xFA8072
        
FA8072
CRGB::SandyBrown0xF4A460
        
F4A460
CRGB::SeaGreen0x2E8B57
        
2E8B57
CRGB::Seashell0xFFF5EE
        
FFF5EE
CRGB::Sienna0xA0522D
        
A0522D
CRGB::Silver0xC0C0C0
        
C0C0C0
CRGB::SkyBlue0x87CEEB
        
87CEEB
CRGB::SlateBlue0x6A5ACD
        
6A5ACD
CRGB::SlateGray0x708090
        
708090
CRGB::SlateGrey0x708090
        
708090
CRGB::Snow0xFFFAFA
        
FFFAFA
CRGB::SpringGreen0x00FF7F
        
00FF7F
CRGB::SteelBlue0x4682B4
        
4682B4
CRGB::Tan0xD2B48C
        
D2B48C
CRGB::Teal0x008080
        
008080
CRGB::Thistle0xD8BFD8
        
D8BFD8
CRGB::Tomato0xFF6347
        
FF6347
CRGB::Turquoise0x40E0D0
        
40E0D0
CRGB::Violet0xEE82EE
        
EE82EE
CRGB::Wheat0xF5DEB3
        
F5DEB3
CRGB::White0xFFFFFF
        
FFFFFF
CRGB::WhiteSmoke0xF5F5F5
        
F5F5F5
CRGB::Yellow0xFFFF00
        
FFFF00
CRGB::YellowGreen0x9ACD32
        
9ACD32

上記の色が定義されています。実際色が多すぎてよくわかりません。

色がおかしいとき

leds[0] = CRGB::Red;

例えば赤を指定して、緑色が光った場合には設定が必要です。

上記にありますが、一部のLEDは色の並びがRGBではなくBRGになっています。そのため赤を指定して緑になった場合には設定が必要になります。

void setup() { 
  LEDS.addLeds<WS2811, DATA_PIN, GRB>(leds, NUM_LEDS);
}

上記の例がありましたが、ピンのあとにGRBを追加します。

M5Stack社のATOMで確認

#include <M5Atom.h>

void setup() {
  // 初期化
  M5.begin(true, false, true);  // (Serial, I2C, NeoPixel)

  // LED(0固定)
  M5.dis.drawpix(0, CRGB::Red);
}

void loop() {
}

赤になりましたでしょうか?

残念ながら現在のライブラリは緑になると思います。。。

LED_Display::LED_Display(uint8_t LEDNumbre)
{
    FastLED.addLeds<WS2812, DATA_PIN>(_ledbuff, LEDNumbre);
    _xSemaphore = xSemaphoreCreateMutex();
    _numberled = LEDNumbre;
}

初期化部分を見てみると、GRBが指定されていませんね、、、

修正のプルリクエストはあったのですが、最近ライブラリに動きがないのでまったく修正されていません。

色がおかしいまま使うか、自分で初期化コードにGRBを入れるかして対応する必要があります。

色味の調整

RGB LEDは基本的に緑が明るいものが多いです。そのため通常のRGB指定をしても、緑が強く出すぎてしまいます。

これはチップごとに調整する必要があるので、ライブラリ側では補正していません。気になる場合には各色に補正値を入れてから設定する必要があります。

まとめ

はやくM5stack ATOMの色指定がなおってほしい、、、

M5Stack 90°/180°赤外線反射ユニット(OP・90/OP・180)

概要

上記のユニットが日本でも販売されました。ちょっと前に入手していましたが、触ってみました。こちら1.56ドルのものがスイッチサイエンスさんだと209円で販売と、一個あたりの利益が不安になる商品となっています!

商品

外見はこんな感じです。

GROVE端子ですが、PORT Bですのでデジタル端子での通信になります。

裏側です。90度は直角に曲がっています。180度は平らになっています。

反対側です。この隙間に赤外線LEDとセンサーが入っています。

極性はあまり意味がないですが、ダイオードのマークがある方から赤外線がでています。反対側で受信しています。

このスリットに遮断物を入れるとこのスイッチがONになります。

単純スケッチ例

int OP_PIN = 33;

void setup() {
  Serial.begin(115200);
  delay(100);

  pinMode(OP_PIN, INPUT_PULLUP);
}

void loop() {
  Serial.printf("ir receive: %d\n", digitalRead(OP_PIN));
  delay(100);
}

M5StickCなので、GPIO33に接続されています。スリットにカードなどをいれて遮断すると入力がHIGHになります。

割り込みスケッチ例

int OP_PIN = 33;

void IRAM_ATTR op_change() {
  Serial.printf("ir receive: %d\n", digitalRead(OP_PIN));
}

void setup() {
  Serial.begin(115200);
  delay(100);

  pinMode(OP_PIN, INPUT_PULLUP);
  attachInterrupt(OP_PIN, op_change, CHANGE);
}

void loop() {
  delay(1);
}

入力の割り込みを入れることも可能です。ただし、ものすごくチャタリングをするのでこのままだと使いにくいと思います。

チャタリング低減スケッチ例

const int OP_PIN = 33;

QueueHandle_t xQueueOP;

void IRAM_ATTR op_change() {
  uint8_t data = digitalRead(OP_PIN);
  xQueueOverwriteFromISR(xQueueOP, &data, NULL);
}

void setup() {
  Serial.begin(115200);
  delay(100);

  // キュー作成
  xQueueOP = xQueueCreate(1, sizeof(uint8_t));

  // ピン設定と割り込み設定
  pinMode(OP_PIN, INPUT_PULLUP);
  attachInterrupt(OP_PIN, op_change, CHANGE);
}

void loop() {
  uint8_t data = -1;
  BaseType_t ret = xQueueReceive(xQueueOP, &data, 0);
  if (ret != 0) {
    Serial.printf("ir receive: %d\n", data);

    // Skip wait
    delay(5);
  }

  delay(1);
}

キューを使って、変化があった最後の値を取得しています。通常の速度であれば問題ないですが高速でON、OFFを繰り返すとまだチャタリングが発生している気がします。

類似センサー

スリットの距離がある場合にはこちらのレーザーTX/RXユニットで同じようなことができます。

人感センサーなどはPIRを利用したほうがよいと思います。これ以外にもTOFなどの距離センサーや、サーモカメラなどいろいろな類似センサーがあります。

まとめ

窓や扉とかがしまったがを確認するためのセンサーだと思いますが、なかなか使うのは難しいセンサーだと思います。使い方を工夫すると、結構楽しいことに使えと思いますが、他のセンサーでも実現できることが多いはずですので難しいですね。

とはいえ、圧倒的に安いセンサーですので大量に使ったり、とりあえず使ってみるのにはいいと思います。

Espressif純正JTAGボード ESP-PROG

概要

ESP32の販売をしているEspressif社純正のJTAGボードのESP-PROGを紹介します。

ESP-PROGとは?

中身は単なるFT2232HLが載ったボードです。ケーブルが付いてきますが、このケーブルが使えるボードってあったかな?

FT2232HLとは?

UARTやJTAG、SPI、I2Cなどが使えるFT232HLが2つはいっているようなチップです。

日本だと気軽に購入できる場所は無いか、あっても非常に高いです。

FT232HLとは?

1chしか使えないFT232HLだと秋月さんで取り扱いがあります。

上記で使っているのはAliExpressで購入した安いボードですが、DevKitなどをデバッグするのであればこのボードでも大丈夫です。

FT2232Dとは?

これは末尾がDで、Hがつくものより前の世代のボードになります。秋月で2ch使えるものはこれしか購入することができません。

内部にはFT232BMとFT245BMが入っています。FT232BMがJTAG担当、FT245BMがUART担当になってフラッシュの書込とデバッグを同時に使うことも可能です。

DはABCDと世代を表すのですが、HはUSBハイスピードに対応しているバージョンでアルファベットが飛んでいます。Hの方がより速い速度で通信できますが、JTAGではそれほど早い通信速度は必要なさそうです。

普通のケーブルで高速に設定するとデータが化けちゃうらしいです。なのでデフォルトの通信速度は保守的な低い転送速度に設定されています。

使い分け

公式にサポートしているJTAGボードはFT2232HLですので、これを使ったほうがプリセットの設定があるので楽です。

とはいえ、なかなか日本だと入手しにくいので、設定書き換えが必要そうですがFT232HLを使うのも手だと思います。

まとめ

Digi-KeyやMouserを使う人であれば、ついでに購入しておいてもいいぐらいの値段だと思います。

さらに上位のFT4232Hってのもありますが、個人ユースで4chを使う用途がないのと、ESP-PROGの倍以上の値段します。。。