2016年10月 3日

#Arduinoくじ

IoT時代ということでArduinoに慣れるべく、Amazonプライムの関東送料無料枠を利用して、安い部品ガチャしてひたすらHello worldする話です。
実質AliExpressの中継業者に頼んでることになってそうですが、購入履歴統一してもらえるしまぁいっかなという感じです。
(2016.11.14)Amazonで安めのものがなくなってきたのでAliExpressに手を出しました。ざっと見回したところ、手数料マージンぽいものが減った分お安く、その代わり到着するまで1,2週間長そうという印象です。

○Arduino UNO R3互換 2016.07.28

EasyWordMall UNO R3開発ボード USBケーブル付属 Arduinoと互換
https://www.amazon.co.jp/gp/product/B018VYJIEU/
2016.07.10 445円で購入

USB-SerialがFTDIでなくてCH340とかなので別ドライバが必要

Arduino Nano(互換機)をMac OS X El Capitanと接続する
http://figrobo.blog.fc2.com/blog-entry-20.html
How To Use Cheap Chinese Arduinos That Come With With CH340G / CH341G Serial/USB Chip (Windows & Mac OS-X)
http://kig.re/2014/12/31/how-to-use-arduino-nano-mini-pro-with-CH340G-on-mac-osx-yosemite.html

El Capitan(10.11.5)のMBA(Mid 2013)にドライバインストール、再起動後、ttyを確認。

$ ls -l /dev/tty.*
crw-rw-rw- 1 root wheel 18, 0 7 28 00:12 /dev/tty.Bluetooth-Incoming-Port
crw-rw-rw- 1 root wheel 18, 2 7 28 00:14 /dev/tty.wchusbserial1410

無事LED点滅が動きました。

○キャラクタ液晶 2016.07.27

SODIAL(R)キーパッド シールド ボード ブルー バックライト Arduinoロボット LCD 1602 1280 2560 UNO US用品
https://www.amazon.co.jp/gp/product/B00OPO2W6M/
2016.07.10 460円で購入

Arduino用液晶シールド LCD Keypad Shields by ボクにもわかる地上デジタル
http://www.geocities.jp/bokunimowakaru/diy/arduino/lcds.html

>始めに動かした時に、シールド左上にある可変抵抗器で液晶のコントラスト調整を行います。調整しなければ何も表示されない場合があります。壊れているのかと疑う前に、必ず、可変抵抗をゆっくり回しながら確認してください。(可変抵抗のほんの一部の区間でしか液晶に文字が表示されません。)
うわああああああああ。

結局のところピンアサインの変更だけで動作しました。


○2.4インチカラー液晶 2016.07.27

【ノーブランド品】Arduino UNO NEW用 2.4インチTFT LCDタッチスクリーンモジュールボード
https://www.amazon.co.jp/dp/B01GZP2CA4/
2016.07.10 620円で購入

adafruitのTFTLCD-LibraryとAdafruit-GFX-Libraryでは真っ白画面しか表示されず。
同一品と思われるものが世界的に各地で売られているのでSPFD5408で調べて以下のページの手順を実行、RGBが反転してそうですが無事なんかでました。

How to use 2.4 inch TFT LCD SPFD5408 with Arduino Uno and Mega
http://www.instructables.com/id/How-to-use-24-inch-TFT-LCD-SPFD5408-with-Arduino-U/


○温度計・湿度計 2016.08.21

EasyWordMall DHT11温湿度センサーモジュール Arduino用
https://www.amazon.co.jp/gp/product/B010PZZPLS/
水色の安いやつ
2016.07.10 198円で購入

【ノーブランド品】DHT22/AM2302  デジタル温度と湿度センサー  接続線付き
https://www.amazon.co.jp/gp/product/B01DB8JH4M/
白色の安めのやつ
2016.07.10 560円で購入

Arduino温湿度測定ロガー・湿度センサーの比較
http://www.geocities.jp/bokunimowakaru/diy/arduino/humidity.html
を参考に、DHT11とDHT22の精度をフムフムと眺めた上で購入。

ArduinoでDHT11デジタル温度センサーをAdafruitライブラリから使う
http://qiita.com/masato/items/99e5dac91d13650e90a2
を参考に、デジタル2pinと4pinからDHT11とDHT22のあたりを読み取ってみます。

DHT11 Humidity: 63.00 % Temperature: 26.00 *C 78.80 *F Heat index: 27.04 *C 80.67 *F
DHT22 Humidity: 32.80 % Temperature: 30.00 *C 86.00 *F Heat index: 28.97 *C 84.15 *F
↓冷房切って飯食ってきた
DHT11 Humidity: 62.00 % Temperature: 27.00 *C 80.60 *F Heat index: 28.23 *C 82.81 *F
DHT22 Humidity: 33.20 % Temperature: 30.20 *C 86.36 *F Heat index: 29.21 *C 84.57 *F

湿度がすごい差なのでライブラリ編集ミスったかなという感じです、またあとで調べよう。

2016.08.22再測定
DHT11 Humidity: 66.00 % Temperature: 26.00 *C 78.80 *F Heat index: 27.15 *C 80.87 *F
DHT22 Humidity: 38.00 % Temperature: 29.10 *C 84.38 *F Heat index: 28.53 *C 83.36 *F
今日も湿度怪しい。個体差かな。

○圧電ブザー 2016.10.02

HiLetgo 3.3V-5V受動的ブザーモジュール ビープアラームセンサー9012トランジスタドライブArduinoと互換
https://www.amazon.co.jp/gp/product/B01HTC5RNG/
2016.08.22 120円で購入

ファイル→スケッチの例→02. Digital→toneMelodyを開き、
3.3VをVCCに、GNDを接続し、I/Oとpin8を接続して演奏成功。

○8セグLED他 2016.10.03

HiLetgo TM1638 8ビット LED デジタル チューブ 8キー ディスプレイ ボタン 電子モジュール for AVR Arduino ARM
https://www.amazon.co.jp/gp/product/B01D140BT6/
2016.08.22 270円で購入

花夢電科雑多log:JY-LKM1638の使い方 arduino メモ
http://hananekolog.blogspot.jp/2013/05/jy-lkm1638-arduino.html

Automatically exported from code.google.com/p/tm1638-library
https://github.com/rjbatista/tm1638-library

GitHubにライブラリとサンプルが公開されている。2012.11のv2.1.3が最新だったのがv2.2.0としてGitHubに引き上げられた模様。
Releaseからtm1638-library-2.2.0.zipをダウンロードして、Aruduino IDEからライブラリをインクルード。

th1638_one_module_exampleを開いて、ピンアサインを決めて5VとGNDつないで正常動作を確認。
なんかキーンって高周波が鳴ってる。

○BT通信モジュール 2016.10.23

HC-06 ワイヤレスブルートゥースモジュール 無線シリアルモジュール
https://www.amazon.co.jp/gp/product/B010SHNZ92/
2016.10.12 500円で購入

Arduinoを簡単にBluetooth無線化するHC-05/HC-06
http://nefastudio.net/2015/02/20/3850.html

・HC-05は親機(Master)になれる。HC-06は子機(Slave)Only。
・HC-05/HC-06ともにTX/RXをそのままBluetooth SPPで中継するfirmが焼かれており、UART Serialを無線化するユニット、という方が正しそう。
・まぁ技適はうんたらかんたら

http://www.micro4you.com/files/ElecFreaks/Bluetooth%20HC-06.pdf
>Slave, 9600 baud rate, N, 8, 1. Pincode 1234
初期設定ではデバイス名がHC-06、PIN(ペアリング4桁数字パスワード)が1234。

まずはただのArduinoなSerial中継から動作確認、BT-SPPの親はAndroidを採用。

・HC-06は外しておいて、先に約1秒に1回をSerialに時間をprintするスケッチをWriteしておく

// print millis() 1sec. interval
void setup() {
  Serial.begin(9600);
}
 
void loop() {
  Serial.println(millis());
  delay(1000);
}

・VCC(5V), GND, Arduinoのpin0(RX)-HC-06のTX, Arduinoのpin1(TX)-HC-06のRXを接続。
・GNDとVCC刺すとATコマンド受付・ペアリング待ちモードになるらしくLEDが点灯する。
・Androidの設定からスキャンしてHC-06、pin 1234でペアリング。
BT Simple Terminalを使用。
・アプリを開いてデバイスを選択すると接続しにいってくれる。

これだと送信側しか試してないな、まぁいっか。

前述のサイトを参考に、pin10,11にSerial中継し、ATコマンドでデバイス名の変更を試す。HC-05は38400とあるけどHC-06は9600でいけた。

○距離センサ 2016.11.05

超音波距離センサモジュール HC-SR04
https://www.amazon.co.jp/gp/product/B00RCC70KC
2016.07.29 220円で購入
(2016.11.05記載:現時点では360円。ハズレレビューがアレだったので避けましたが140円の子もあるのでそちらでも。)

Arduino編:その8 距離センサーを使ってみる
http://marupeke296.com/EL_Ard_No8_SuperSonic.html

5V→Vccに、GND→Gnd、PIN2→Trig、PIN3→Echoで接続して測定。

125 us 2.1367 cm
322 us 5.5041 cm
619 us 10.5809 cm
758 us 12.9569 cm
2453 us 41.9304 cm

いい感じに取れている。DHT11から気温もとって計算式に入れてみよう。

5V→+に、GND→?に、PIN4→outに接続して測定。

// HD-SR04 ultrasonic distance sensor
// http://marupeke296.com/EL_Ard_No8_SuperSonic.html
#define PIN_TRIG 2
#define PIN_ECHO 3
int interval = 0;
double distance = 0;
// v(m/s) / 20000 = 331.5 + t * 0.61 / 20000
double RATE = (331.5 + 17.0 * 0.61) / 20000;
 
// + DHT11 (temperature and humidity sensor)
#include "DHT.h"
#define DHT11PIN 4
DHT dht11(DHT11PIN, DHT11);
 
void setup() {
  pinMode(PIN_TRIG, OUTPUT);
  pinMode(PIN_ECHO, INPUT);
  Serial.begin(9600);
  
  dht11.begin();
}
 
void loop() {
  // measure temperature
  float t = dht11.readTemperature();
  RATE = (331.5 + t * 0.61) / 20000;
  
  // measeure distance
  // trigger pulse
  digitalWrite(PIN_TRIG, HIGH);
  delayMicroseconds(100);
  digitalWrite(PIN_TRIG, LOW);
  
  // get interval
  interval = pulseIn(PIN_ECHO, HIGH);
  
  if (interval > 0) {
    distance = interval * RATE; // cm
    Serial.print(t);
    Serial.print("[c] ");
    Serial.print(interval, DEC);
    Serial.print("[us]\t");
    Serial.print(distance, 4);
    Serial.print("[cm]\n");
  }
  delay(1000);
}

19.00[c] 340[us] 5.8325[cm]
19.00[c] 404[us] 6.9304[cm]
19.00[c] 1310[us] 22.4724[cm]
19.00[c] 2493[us] 42.7662[cm]

いんじゃないでしょうか。
この部屋は19℃らしい。だいぶ寒くなってきましたね(買ってから3ヶ月放置してしまった)。

○MicroSDカードスロットモジュール 2016.11.05

MicroSD SPI 6pinモジュール
https://www.amazon.co.jp/gp/product/B010GXAFFU
2016.08.22 110円で購入。

Amazon:カスタマーレビュー:ちゃんと書き込めます
https://www.amazon.co.jp/review/R3NVAUVDVNK6OO/?nodeID=13299531

・Vccに5Vを接続可能(逆に3.3Vではないらしい)
・Aruduinoスケッチの例からSD→CardInfoやSD→ReadWriteを開くとpin11,12,13,4に接続する例がコメントに書かれているので従う。
・CS(Chip Select)はモジュール(の実装?)に依存するようだが、4で動作した。

とくに何も困ることなく動きました。標準ライブラリ互換はいいものですね。

○Digispark ATTINY85クローン 2016.11.05

HiLetgo Digispark Kickstarter ATTINY85 Digispark 超小型Arduino互換
https://www.amazon.co.jp/gp/product/B00VM5M4W4/
2016.08.22 185円で購入。

Digistump Wiki:Connecting and Programming Your Digispark
http://digistump.com/wiki/digispark/tutorials/connecting

・環境設定から、追加のボードマネージャのURLにhttp://digistump.com/package_digistump_index.jsonを追加
・ツール→ボード→ボードマネージャからボードマネージャを開く
・タイプ:提供された(Contributed)を選択、Digistump AVR Boards by Digistumpを選択してインストール。

Model A互換だったらしく組み込み赤色LEDはpin1でした。
Lチカコードを書いて「検証」→「マイコンボードに書き込む」を選択したのち、USBコネクタに挿入。

無事動きましたが、どれかpin入力とHIDぐらいまでは試してみないと。

○Arduino Pro Miniクローン 2016.11.06

HiLetgo Pro Mini 5V 16M ATmega328 ATmega328P-AU Arduinoと互換 With PIN
https://www.amazon.co.jp/gp/offer-listing/B013QV2EQM/
2016.08.22 270円で購入。

Pro Miniさんです。Unoクローンが安くなかった時代にはプロトタイプ後のセット保存に使われていたりした模様ですが、今は目的をもって小型化したい以外はわざわざPro Miniで頑張らなくても良い気配がします。IoT的には上位に投げるための何か+αが必須ですし。

FTDIなUSBシリアルモジュール等を使って書き込む方法が王道の模様ですが、Arduino UNO経由でスケッチが書き込めるとのことです。

ArduinoISPでProMiniへスケッチを書き込む
http://nopnop2002.webcrow.jp/ArduinoISP/ProMini.html

以下、OS X(El Capitan)+Arduino1.6.9での作業。
AVRマイコンを Arduino-IDE 1.6.x で使用する方法よりAVRhardware.zipをダウンロードし、展開。
・Arduinoインストールフォルダ、/Contents/Java/hardware/配下にarduino/と並ぶようにatmegaフォルダを配置。
・atmega/avr/boards.txtを編集。
・ArduinoISPスケッチをビルドして、Unoにアップロード。
・ツール→ボードでArduino Unoを選択。
・ファイル→スケッチの例→11.ArduinoISP→ArduinoISPを選択、検証→マイコンボードに書き込む。
・ツール→書き込み装置でArduino as ISPを選択。(元はAVRISP mkIIだった)

○モーメンタリタクトスイッチとキャップ 2016.11.14

モーメンタリタクトスイッチとラウンドキーキャップ
https://www.amazon.co.jp/gp/product/B01G36GRO2/
2016.11.06購入 430円

意外と知られていない?INPUT_PULLUP | スイッチサイエンス マガジン
http://mag.switch-science.com/2013/05/23/input_pullup/
プルアップ抵抗が内蔵されてることを初めて知りました。(コピペ動作確認で知らずに使ってた気配はある・・・)

ただのスイッチなのであんまりArudinoくじ感は無いのですが、手持ちが「はじめてのArduinoセット」みたいなのについてきたスイッチが1つしかなかったことと、これが小さくて若干押しづらいなと思ったのでキャップがつけられるセットを買いました。
ちょっとグラついてるのが買わなくてもよかったかとも思いましたが、ブレッドボードの見た目は華やかになりました。

○128x128 SPI 65Kフルカラー TFTディスプレイ 2016.11.16

https://www.aliexpress.com/item/Replace-5110-LCD-1-44-Red-Serial-128X128-SPI-Color-TFT-LCD-Display-Module/1859103951.html
2016.11.06購入 $2.77

AliExpress童貞を卒業した。

以下の様に接続。

128x128 LCD -> Arduino UNO
LED -> 3.3V(バックライト)
SCK -> 13
SDA -> 11
A0 -> 8
RESET -> 9
CS -> 10
GND -> GND
VCC -> 3.3V

・モジュールの入った袋にST7735と書いてあったのでそれを元に調べたところ、Adafruit_ST7735ライブラリで動きました。

adafruit/Adafruit-ST7735-Library
https://github.com/adafruit/Adafruit-ST7735-Library

色々調べた結果、この界隈は互換チップが出たり後継チップが出たり忙しいらしい。以下、雑に調べた内容のメモ。

・ST7735とST7735RとST7735Sなどがある模様
・初期化コマンドが違うらしい
・AdafruitではST7735Sで、1.8"の128x160と1.44"の128x128があるので、tft.initRの引数を変えてやる必要がある

tft.initR(INITR_144GREENTAB);   // TABは液晶保護シールのつまみの部分のことらしい

・画面端にノイズが乗る(描画開始アドレス番地が違うっぽい)話は描画開始位置がずれている話らしい。

Arduino(9) Adafruit_ST7735ライブラリの修正(aitendoの1.8型LCD用)
http://blog.boochow.com/article/423988914.html
>画面右端と下端にゴミが残り、画面左端が欠けてしまいます。

・sumotoy氏のST7735 Display Driverでも戦える模様。
Arduino + カラー液晶で落ち物ゲームを作る
http://qiita.com/d2cd-ytakada/items/30d9c42e16579889bc9d
>128x128のこの液晶向けのコンフィグがなかったので、コンフィグを追加して利用しています。

ILI9341, ST7735, SSD13xxあたり、macsbug氏のエントリも参考になる。

Using the TFT LCD display in the ESP8266
https://macsbug.wordpress.com/2016/04/16/using-the-tft-display-in-the-esp8266/
1.44″ 128×128 Color TFT in ESP8266
https://macsbug.wordpress.com/2016/10/07/1-44-128x128-color-tft-in-esp8266-2/
1.8″ 128×160 Color TFT in ESP8266
https://macsbug.wordpress.com/2016/10/22/1-8%E2%80%B3-128x160-color-tft-in-esp8266/

○128x64 SPI 固定カラー OLEDディスプレイ 2016.11.17

https://www.amazon.co.jp/gp/product/B01MDK1X72/
2016.11.04購入 2016.11.17着 450円 White-White
https://www.amazon.co.jp/gp/product/B01M4K7OW2
2016.11.04購入 2016.11.17着 450円 Yellow-Blue

ビビッドなツートンカラーが目をひく128x64のOLEDディスプレイ+Arudino、以下のサイトが検索で出てきて、ちっちゃい!かわいい!楽しそう!となったわけですが。

mgo-tec電子工作:FRISKケースにESP-WROOM-02開発ボードとOLED( SSD1306 )を入れてみた( Webニュースミニ電光掲示板 )
https://www.mgo-tec.com/blog-entry-frisk-ws-ssd1306-webnews.html

この@ta9marと同じ二の轍踏んで、Amazonで安かった方のSPIです。日本語の情報が少なそうですが、SSD1306でGoogle先生に聞きに行きます。

SSD1306 based OLED connected to Arduino
https://github.com/jandelgado/arduino/wiki/SSD1306-based-OLED-connected-to-Arduino

>Although it was sold as an I2C display, it turned out that it operates as an SPI device by default.
I2CとしてeBayで売られてたけどSPIになってるやつが来たよ。(つらい)

このjandelgadoさんはAdafruitとu8gのライブラリで動かしたと言ってるので順番に追いかけてみます。

[1] Adafruit SSD1306 + Adafruit GFX

https://github.com/adafruit/Adafruit_SSD1306
https://github.com/adafruit/Adafruit-GFX-Library

Adafruit_SSD1306のサンプルに、ssd1306_128x64_spiってそのまんまのがありますので、まずは従ってみます。

SSD1306 128x64 OLED -> Arduino Uno
GND -> GND
Vcc -> 3.3V
D0(CLK,SCK) -> 10
D1(MOSI) -> 9
RES -> 13
DC(A0) -> 11
CS -> 12

おもむろに検証したらLCDのheightが64じゃないのでAdafruit_SSD1306.hを編集しろとエラーが出ました。
もう少しちゃんと作れよという気持ちになりましたがコメントアウトされている#define SSD1306_128_64を有効にしてもう1回挑戦。

>最大32,256バイトのフラッシュメモリのうち、スケッチが21,516バイト(66%)を使っています。
>最大2,048バイトのRAMのうち、グローバル変数が1,594バイト(77%)を使っていて、ローカル変数で454バイト使うことができます。
>スケッチが使用できるメモリが少なくなっています。動作が不安定になる可能性があります。
かわいくアニメーションデモが動きましたがさすが世界のAdafruit。でかい。

[2] u8glib

u8glib
https://code.google.com/archive/p/u8glib/

u8glib_arduino_v1.18.1.zipが最新らしいのでダウンロードしてインストールする。

U8glib->HelloWorldサンプルを開く。
初期化マクロはAdafruitと同じつなぎ方で済ませられる様に、5引数のやつを選択。

U8GLIB_SSD1306_128X64(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE) 
// https://github.com/jandelgado/arduino/blob/master/ssd1306_sample_u8g/ssd1306_sample_u8g.ino
U8GLIB_SSD1306_128X64 u8g(10, 9, 12, 11, 13);

>最大32,256バイトのフラッシュメモリのうち、スケッチが10,560バイト(32%)を使っています。
>最大2,048バイトのRAMのうち、グローバル変数が252バイト(12%)を使っていて、ローカル変数で1,796バイト使うことができます。
だいぶ空き容量が幸せになりました。

[3] greiman/SSD1306Ascii

https://github.com/greiman/SSD1306Ascii
>Text only Arduino Library for SSD1306 OLED displays

さらに小さいのも見つけました。
>最大32,256バイトのフラッシュメモリのうち、スケッチが4,074バイト(12%)を使っています。
>最大2,048バイトのRAMのうち、グローバル変数が62バイト(3%)を使っていて、ローカル変数で1,986バイト使うことができます。
フォントはCallibri15指定でこのくらい。

SSD1306AsciiSoftSpiクラスを使うとピンアサインが自由になります、前2つから挿し替えしないでも動くように以下の通りに初期化して動作を確認。

// pin definitions
#define OLED_DC   11
#define OLED_CS   12
#define OLED_CLK  10
#define OLED_DATA 9
#define OLED_RESET 13
  
SSD1306AsciiSoftSpi oled;
  
void setup() {
  oled.begin(&Adafruit128x64, OLED_CS, OLED_DC, OLED_CLK, OLED_DATA, OLED_RESET);

○温湿度・気圧センサモジュール BME280 2016.11.20

https://www.amazon.co.jp/gp/product/B01M98R905/
2016.10.16購入 2016.11.07到着 650円

I2CとSPI3線・4線いずれにも対応しているせいか、略称が混ざってて分かりづらいのをまず読み解きます。

adafruit / BME280
https://github.com/adafruit/Adafruit_BME280_Library

Adafruitのサンプルスケッチbme280testでは、I2C 2線とSPI 4線に対応の模様です。

mgo-tec電子工作:BME280 搭載、温度・湿度・気圧センサーを SPI で動かしてみた( ESP-WROOM-02 ( ESP8266 )使用)
https://www.mgo-tec.com/blog-entry-bme280-spi-esp8266-wroom-01.html
>13番ピンを MOSI ( Master Output Slave Input ) として、それをBME280側の SDI ( Slave Data Input )に接続します。略した頭文字だけでは訳が分からないので、こうして訳すと分かりやすいですね。
>12番ピンは MISO ( Master Input Slave Output ) で、SDO ( Slave Data Output )に接続します。
MOSIとかMISOとか初めて理解しました。

秋月電子のBME280モジュールの表も参考にします。
http://akizukidenshi.com/download/ds/akizuki/AE-BME280_manu_v1.0.pdf

ソフトウェアSPIが一番配線の自由度が高そうなのまずはそれで。

MBE280 -> Arduino Uno
SDO -> MISO 12
CSB -> CS 10
SDA(SDI) -> MOSI 11
SCL-> SCK 13
GND -> GND
3V3 -> 3.3V

・室内で測ってみた。それなり。
Temperature = 22.94 *C
Pressure = 1010.75 hPa
Approx. Altitude = 20.84 m
Humidity = 54.34 %

・外持ってってしばらく待ってみたけどあまり下がってくれない。
Temperature = 16.76 *C
Pressure = 1010.86 hPa
Approx. Altitude = 19.93 m
Humidity = 65.07 %

SPIで複数CS繋いで先日のSSD1306 OLEDとBME280を同時に動かしてみることに。
ChipSelectまわりが期待通りにいってくれなかったのですが、結局ループ内でそれぞれ初期化するクソコードで済ませました。

// SSD1306 OLED 128x64 + BME280 by SoftSpi
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
  
#include <SPI.h>
#include "SSD1306Ascii.h"
#include "SSD1306AsciiSoftSpi.h"
  
// pin definitions    // SSD1306
#define OLED_DC   11  // DC(MISO)
#define OLED_CS   12  // CS
#define OLED_CLK  10  // D0
#define OLED_DATA 9   // D1(MOSI)
#define OLED_RESET 13 // RST
  
SSD1306AsciiSoftSpi oled;
  
// pin definitions   // BME280
#define BME_SCK 10   // SCL
#define BME_MISO 11  // SDO
#define BME_MOSI 9   // SDA(SDI)
#define BME_CS 8     // CS
  
#define SEALEVELPRESSURE_HPA (1011.9)
  
//Adafruit_BME280 bme; // I2C
//Adafruit_BME280 bme(BME_CS); // hardware SPI
Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO,  BME_SCK);
  
//------------------------------------------------------------------------------
void setup() {
  Serial.begin(9600);
  Serial.println(F("BME280 test"));
  
  oled.begin(&Adafruit128x64, OLED_CS, OLED_DC, OLED_CLK, OLED_DATA, OLED_RESET);
  oled.setFont(Callibri15);
  oled.clear();
  oled.println("*+,-./0123456789:");
  oled.println("abcdefghijklmno");
  oled.println("ABCDEFGHIJKLMNO");
}
  
//------------------------------------------------------------------------------
float temperature;
float pressure;
float altitude;
float humidity;
  
void loop() {
  bme.begin();
  temperature = bme.readTemperature();
  pressure = bme.readPressure() / 100.0F;
  altitude = bme.readAltitude(SEALEVELPRESSURE_HPA);
  humidity = bme.readHumidity();
  
  Serial.print("Temperature = ");
  Serial.print(temperature);
  Serial.println(" *C");
  Serial.print("Pressure = ");
  Serial.print(pressure);
  Serial.println(" hPa");
  Serial.print("Approx. Altitude = ");
  Serial.print(altitude);
  Serial.println(" m");
  Serial.print("Humidity = ");
  Serial.print(humidity);
  Serial.println(" %");
  Serial.println();
  
  oled.begin(&Adafruit128x64, OLED_CS, OLED_DC, OLED_CLK, OLED_DATA, OLED_RESET);
  oled.setFont(Callibri15);
  oled.clear();
  oled.print("Temperature ");
  oled.print(temperature);
  oled.println(" *C");
  oled.print("Pressure ");
  oled.print(pressure);
  oled.println(" hPa");
  oled.print("Altitude ");
  oled.print(altitude);
  oled.println(" m");
  oled.print("Humidity ");
  oled.print(humidity);
  oled.println(" %");
  
  delay(2000);
}

×HC-08クローン? CC2541 UART-BLE中継モジュール 2016.11.20

https://www.aliexpress.com/item/HC-08-Bluetooth-Serial-Port-Module-Bluetooth-4-0-Low-Power-Consumption-Microampere-Level-Current/32659172102.html
2016.11.06購入 $3.12

HC-06と同等のセッティングということで、SoftSerial中継でbaudrate 9600を設定したスケッチを焼き込むも、ATコマンドの動作やAT+VERSIONで表示される文字列がどうにも類似品にも該当しない。色々試しているうちにbaudrate 1200でしかもAT→OKにしか反応しない子になってしまった。
23pinとか26pinがfactory resetとの情報を得たので3V3のHIGHなどを差し込むも、特に変化なし。

UART(Serial)-BLE中継機は、Bluetooth ClassicのSPP中継HC-05/HC-06で有名なwavesenのHC-08、JNHuaMaoがHM-10とその互換らしきBOLUTEK CC-41Aがメジャーな模様。
・古くはCC2540、今はCC2541しかなさそう。
・CC2541直は3V3、レギュレータが乗ってる子は5Vで良さそう。
・baudrate 9600でSoftwareSerial中継を書き、AT+VERSION、AT+HELP、AT+HELP?で板の素性を確定させるのが良さそう。

HC-08 V2.3
http://www.wavesen.com/mysys/db_picture/news3/2016510120101101.pdf
HMシリーズ
https://digistump.com/wiki/_media/digispark/tutorials/bluetooth40_en.pdf
BOLUTEK BLE-CC41-A
http://img.banggood.com/file/products/20150104013200BLE-CC41-A_AT%20Command.pdf

HM-10もどきは遅延してあと2つほど来るはずなのでまた試す。


○128x64 I2C White固定カラー OLEDディスプレイ

https://www.aliexpress.com/item/White-Blue-White-and-Blue-color-0-96-inch-128X64-OLED-Display-Module-For-arduino-0/32713614136.html
2016.11.06購入 2016.11.21到着 $2.64

greiman / SSD1306Ascii
https://github.com/greiman/SSD1306Ascii
のWireI2c128x64でさっくり表示。背面にI2Cアドレスがどーたら書いてあるのは無視して0x3C設定で動きました。


○ESP-12E ESP8266 CP2102 NodeMCUクローン(?) 2016.11.23

https://www.aliexpress.com/item/V3-Wireless-module-NodeMcu-4M-bytes-Lua-WIFI-Internet-of-Things-development-board-based-ESP8266-esp/32647542733.html
2016.11.06購入 2016.11.23到着 $3.78

ESP8266はESP-12E、レギュレータはAMS1117、USB-SerialはCP2102と読み取れます。背面基盤刻印はAliの画像とは違いました。特に何のロゴもありません。
まずはCP210xのUSB Driverのインストールの上、ATコマンドモードの確認から。

CP210x USB - UART ブリッジ VCP ドライバ
http://jp.silabs.com/products/mcu/Pages/USBtoUARTBridgeVCPDrivers.aspx
>Macintosh OSX (v4) 用ダウンロード
からダウンロードしてdmgを展開、pkgをインストール。

充電用ケーブルだと動かないという罠を踏みつつ、無事認識。

youtenMBA:~ youten$ ls -1 /dev/cu*
/dev/cu.Bluetooth-Incoming-Port
/dev/cu.SLAB_USBtoUART

Arduinoのシリアルコンソールから115200bpsに設定して改行コードをCRおよびLFを設定して本体のRSTを押下。
"AT"や"AT+GMR"が動作しました。

Espressif ESP8266 Arduino互換でスケッチが使える ESP-12Eモジュール基板
http://www.neko.ne.jp/~freewing/hardware/espressif_esp8266_esp_12e/
https://github.com/espressif/ESP8266_AT/wiki

AT+GMR
AT version:1.1.0.0(May 11 2016 18:09:56)
SDK version:1.5.4(baaeaebb)
Ai-Thinker Technology Co. Ltd.
Jun 13 2016 11:29:20
OK
  
AT+CWMODE=1 // WiFiクライアントモード
OK
  
AT+CWJAP="WiFiのSSID","WiFiのパスワード"
WIFI CONNECTED
WIFI GOT IP
OK
  
AT+CIFSR
+CIFSR:STAIP,"192.168.11.17"
+CIFSR:STAMAC,"5c:cf:7f:d9:14:fc"
OK

IPアドレスもらうの早いなぁ。
よくわからん
続いてArduinoスケッチ書き込みを試します。

Arduino IDE に Staging(Stable)版ESP8266 ボードをインストールする方法
https://www.mgo-tec.com/esp8266-board-install01-html

https://github.com/esp8266/Arduino
>Boards manager link: http://arduino.esp8266.com/stable/package_esp8266com_index.json

Arduinoのpreferenceから追加のボードマネージャのURLに設定、ツール→ボード→ボードマネージャからesp8266を選択、ver2.3.0をインストール。
インストール後、NodeMCU 1.0 (ESP-12E Module)を選択します。

CPU Frequency 160MHz, Flash Size 4M (3M SPIFFS), Upload Speed 921600, シリアルポート /dev/cu.SLAB_USBtoUART, 書込装置 USBaspを選択してpin16のLチカスケッチが無事動作しました。


○サーボ SG90 2016.11.23

https://www.aliexpress.com/item/Tower-Pro-9g-micro-servo-for-airplane-aeroplane-6CH-rc-helcopter-kds-esky-align-helicopter-sg90/1579234971.html
2016.11.07購入 2016.11.23到着 @$1.35 5つ購入、送料$2.00

SG90 -> ESP8266 NodeMCU
茶色 -> GND
赤色 -> 3.3V
橙色 -> D4(GPIO2)

スケッチの例→Servo(esp8266)→Sweepで0度から180度までキュイキュイ往復するのが動きました。


○ESP-12E ESP8266 CH340G 2016.11.26

https://www.amazon.co.jp/gp/product/B01EWWAEB6
2016.11.06購入 2016.11.26到着 420円

NodeMCU V3 LoLinと書いてありますが、Amica製本家とは関係ないそうです。前回のV2クローンとはいくらか違いがありました。
・左上のRESERVEDだった2pinがUSB給電とGNDに。
・組み込みLED(pin16)が無い。
・Upload Speedが921600ではエラーになり、230400に変更する必要がある。
・ブレッドボード2列分横幅が大きいためいつもの120円ブレッドボードだとジャンパが差せない。

NodeMCU系のESP8266板の比較については以下のサイトがまとまってます。

Comparison of ESP8266 NodeMCU development boards
http://frightanic.com/iot/comparison-of-esp8266-nodemcu-development-boards/

○WS2812B シリアル制御 フルカラーLED 60LED/1m 2017.11.26

https://www.aliexpress.com/item/DC5V-1m-4m-5m-ws2812b-WS2812-LED-Strip-Smart-RGB-5050-Full-color-Pixel-IC-Ditigal/32647587825.html
2016.11.17購入 2016.11.25到着 $8.65(60leds/mの1mのやつ)

けのじ君のこれがかっこよかったのでどういうフルカラーLEDモジュールなんだろうと調べたところ、WS2812BというシリアルフルカラーLEDモジュールがあり、電流がゆるす限り1000個あたりまでは信号線1本で制御ができるというシロモノということがわかりました。

adafruit / NeoPixel
https://github.com/adafruit/Adafruit_NeoPixel

毎度のadafruitさんのNeoPixelというライブラリが対応しているとのことで利用。
先ほどのNodeMcu系 V3 LoLinには左上にVUSBというUSB power outputがあるのでこれなら5Vが出るので、こちらをVccに接続。

LoLin -> ES2812BシリアルLED
VUSB -> Vcc
GND -> GND
GPIO2 -> Din(信号線)

ピカピカに成功しました。

○ESP8266 WeMos D1 R2クローン RobotDyn WiFi D1 R2

https://www.aliexpress.com/item/WeMos-D1R2-analog-WiFi-D1-R2-integration-of-ESP8266-32Mb-flash-form-factor-for-Ard-Uno/32739176923.html
2016.11.06購入 2016.11.29到着 $3.49

ピンアサインは以下のPDFなどを参照、Unoとはピンヘッダの物理的な互換はあるけどピン互換は・・・って感じですね。
https://github.com/esp8266/Arduino/files/166799/Wemos_Pins_00.pdf

シリアルはCH340G、built in ledが無いので適当なLEDをつないで動作確認しました。

○抵抗・キャパシタ・ジャンパワイヤ・モーメンタリスイッチ・ブレッドボードセットケース付き

https://www.aliexpress.com/item/Starter-Kit-for-Arduino-Resistor-LED-Capacitor-Jumper-Wires-Breadboard-resistor-Kit-with-Retail-Box/32587061444.html
2016.11.07購入 2016.12.10到着 $8.70

オームの法則以上のことはあんまりないのですが、LEDの直列とか並列とかはそれなりに面白かったです。
理科や技術の授業以上に覚えがない人はない人はやんざむ先生のこた電で電子回路に入門しましょう。

こた電
http://www.kotaden.com/index.html

「丁寧」「情報量が多い」サイトはあるんだけど「シンプルでやさしい」「必要最小限」のセンスがすげー良いです。オススメ。

○MP3 Playerモジュール DFPlyaer Mini

https://www.aliexpress.com/item/Mini-MP3-Player-Module-TF-Card-U-Disk-Mini-MP3-Player-Audio-Voice-Module-Board-For/32657798948.html
2016.11.08購入 2016.11.29到着 $1.36

Get Wild退勤にマストバイ、Micro SDカードスロットつきのMP3 Playerモジュール。

以下のサイトを参考に、Arduino母艦はESP8266 NodeMCUを利用、Software Serial接続。3端子の圧電ブザーはGND->GND, SPK1->I/O, 3V3->VCCと接続しています。

ESP8266で音楽や音声などを鳴らす
http://www.kmrweb.net/micro/dfplayer.html

Arduino用ライブラリはGitHubから。

DFRobot/DFPlayer-Mini-mp3
https://github.com/DFRobot/DFPlayer-Mini-mp3

○WiFi,BLE搭載Arduino互換系 ESP-WROOM-32 DOIT製

https://www.aliexpress.com/item/ESP32-Development-Board-WiFi-Bluetooth-Ultra-Low-Power-Consumption-Dual-Cores-ESP-32-ESP-32S-Board/32772569634.html
$24.85 2017.01.19注文 2017.02.01着

GitHub公式リポジトリのreadmeにセットアップ方法が載ってますので従います。
https://github.com/espressif/arduino-esp32

Installation Instructions → Using through Arduino IDEにしたがって、ツール→ボードからESP32 Dev Moduleを選択します。
Flash Frequency 80MHz, Upload Speed 921600で問題なく動作しました。
BT Classic, BLE側のスタックはまだ十分に揃ってない様なので、エンジョイ製としてはArduino IDEからLチカした後、しばらく様子見したいと思います。

void setup() {
  Serial.begin(115200);
  pinMode(2, OUTPUT); // built in LED is pin2
}
 
void loop() {
  Serial.println("Hello ESP32");
  digitalWrite(2, HIGH);  
  delay(500);
  digitalWrite(2, LOW);
  delay(500);
}

コメントする