2022年7月25日月曜日

温度と湿度センサー(DHT11)の使い方

 ■DHT11の紹介

  DHT11は、温度と湿度を同時に計測することができるセンサーです。下記はモジュール版となり、DHT11単体で使おうとするとデータ受信ピンのプルアップが必要になるのですが、モジュールの場合はそのような対応は不要で、そのままArduinoに接続すれば使えるようになるので便利です。


    DHT11の仕様:

 入力電圧:DC 3~5.5V
 信号出力タイプ:デジタル
 温度測定範囲:0 ℃ ~ 50 ℃
 湿度測定分解能:1℃
 温度測定誤差範囲:±2℃
 湿度測定範囲:20%~90%RH
 湿度測定分解能:1%RH
 湿度測定誤差範囲:±5%RH

■配線図
■部品一覧
ESP8266開発ボード
・DHT11センサーモジュール
USBケーブル
ブレッドボード
ジャンパーワイヤー

■プログラム:
事前に、ライブラリ「DHT_sensor_library」をインストールしてください。

#include "DHT.h"
#define DHTTYPE DHT11   // DHT 11

#define dht_dpin 5
DHT dht(dht_dpin, DHTTYPE);

void setup() {
  Serial.begin(115200);
  dht.begin();
  Serial.println("Humidity and temperature\n\n");
}

void loop() {
  float h = dht.readHumidity();
  float t = dht.readTemperature();         
  Serial.print("Current humidity = ");
  Serial.print(h);
  Serial.print("%  ");
  Serial.print("temperature = ");
  Serial.print(t); 
  Serial.println("C  ");
  delay(800);
}

■ 実物イメージ:

■シリアルモニタ出力



2022年7月24日日曜日

ESP32で1.44"OLEDディスプレイに文字と簡単グラフィック表示

 今回のOLEDディスプレイ:

 SPIで通信を行うため、SPIに関する。下記文章を参照してください。
■ピン一覧
 GND: GND
 VCC: 3.5V~5V電源
 SCL: SPIクロック
 SDA: SPIデータ(MOSI)
 RES: リセット
 DC: HIGHのときデータ、LOWのときコマンドの送信を示す
 CS: SPIの通信相手として選択するときLOWとする
 BLK: LOWのときバックライトをオフ、HIGHのときオン
■部品一覧:
 ESP-WROOM-32開発ボード
 1.44"OLEDディスプレイ(ST7735適用)
 USBケーブル
 ブレッドボード
 ジャンパーワイヤー
■ESP32とのつながる:
  OLED        ESP32
  GND  <ーー>   GND
  VCC  <ーー>   3V3
  SCL  <ーー>   D19
  SDA  <ーー>   D23
  RES  <ーー>   TX2(D17)
  DC   <ーー>   RX2(D16)
  CS   <ーー>   D5
  BLK  <ーー>   3V3
■プログラム:

  事前に、Adafruit_GFXとAdafruit_ST7735はインストールしてください。


#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <Fonts/FreeSerif12pt7b.h>
#include <Fonts/FreeSansBold9pt7b.h>
#include <Fonts/FreeSans9pt7b.h>

#define TFT_DC    16
#define TFT_CS    5
#define TFT_RST   17  
#define TFT_MOSI  23
#define TFT_CLK   19

Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST);

void showIcons() {
  tft.fillRoundRect(30, 95, 30, 30, 5, ST77XX_MAGENTA);
  tft.fillCircle(80, 110, 15, ST77XX_BLUE); 
  delay(500);
}

void setup() {
  tft.initR(INITR_144GREENTAB);
  tft.setRotation(1);  //方向転換
  
  tft.fillScreen(ST7735_BLACK);  //背景色黒色
  tft.setCursor(0, 30);  //カーソル設定
  tft.setTextColor(ST7735_WHITE);  //文字色設定
  tft.setFont(&FreeSerif12pt7b);  //フォント
  tft.print("Hello World");  //文字表示
  tft.setCursor(20, 60);
  tft.setTextColor(ST7735_RED);
  tft.setFont(&FreeSansBold9pt7b);
  tft.print("ESP32");
  tft.setCursor(0, 80);
  tft.setTextColor(ST7735_YELLOW);
  tft.setFont(&FreeSans9pt7b);
  tft.print("PHOENIX-IoT");
  showIcons(); //グラフィック表示
}

void loop() {
}

■実物イメージ:



ESP32紹介とESP32の開発環境構築

 最近、ESP-WROOM-32の開発ボードを入庫したため、ESP32の環境構築方法と使い方を紹介します。

■ESP32とは

 ESP32シリーズとは、中国のEspressif Systems社が販売するワンチップWi-Fi/Bluetoothモジュールの製品群のことを指します。

 ESP32はESP8266後継機であること、ESP8266より、性能やピン数は大幅アップしました。もちろん、値段も高くになりました。

 手持ちの30ピン開発ボードのピン構成:

■環境構築

以前のESP8266環境のベースに紹介させてください。

 ESP8266の環境構築:ESP8266開発ボード初体験

・追加のボードマネージャーのURL

  Arduino IDEの「環境設定」で「追加のボードマネージャーのURL」のところ、「https://dl.espressif.com/dl/package_esp32_index.json」を追加する

・ボードマネージャーでマニフェストをインストール
  「ツール」 => 「ボード: 〇〇」 => 「ボードマネージャー」を開きます
  ESP32を入力し、下記を選択してください。
・モジュール選択
  「ESP32-Dev-Module」を選択できます。
・ドライバーは状態により、「CP2102」と「CH340」のどちらでも使えます。
■検証
残念ですが、今回「Blink」は使えなくなりましたため、「GetChipId」を使います。

・プログラム:
uint32_t chipId = 0;

void setup() {
Serial.begin(115200);
}

void loop() {
for(int i=0; i<17; i=i+8) {
  chipId |= ((ESP.getEfuseMac() >> (40 - i)) & 0xff) << i;
}

Serial.printf("ESP32 Chip model = %s Rev %d\n", ESP.getChipModel(), ESP.getChipRevision());
Serial.printf("This chip has %d cores\n", ESP.getChipCores());
Serial.print("Chip ID: "); Serial.println(chipId);
  
delay(3000);

}
■結果





2022年7月17日日曜日

LCDディスプレイ1602A(I2C無篇)

  LCDディスプレイの表示には、その接続(通信)方法として「パラレル通信方式」やI2C通信などの「シリアル通信方式」があります。

 今回は基本となる「パラレル通信方式」で接続し表示させてみたいと思います。

 パラレル通信方式でディスプレイに表示させるにはESP8266-LCDモジュール間の配線が多くなります。今回は理解を深めるため基本的な接続方法となるパラレル通信方式でESP8266と接続し文字を表示させてみたいと思います。

■配線図

■部品リスト
ESP8266開発ボード
LCDディスプレイ1602A
ブレッドボード
USBケーブル
ジャンパーワイヤー
・可変抵抗(10KΩ小型ボリューム)
1602 LCDモジュール端子構成

ピン(端子)機能
VSSGND(電源)
VDD5V(電源)
V0コントラスト調整(電源)
RSラッチピン
(コントローラーにデータを入れる)
RWリード/ライトピン
(読み込み/書き込みの選択)
E Enableピン
(変更を許可するかを選択)
DB0~DB7 データビット(8ビット)
(4ビットモードでは上位ビットDB4-DB7のみ使用)
ALEDバックライト(アノード) : 5V
KLEDバックライト(カソード) : GND

■ESP8266と1602LCDモジュール端子の接続

LCDモジュールESP8266
VDD5V(VU)
VSSGND
R0可変抵抗器
RSD6
RWGND
ED5
DB4D1
DB5D2
DB6D3
DB7D4
A5V(VU)
KGND
■データ送信量(4ビット or 8ビット)
 LCDモジュールにはDB0~DB7までの8本のデータバスがあります。
 ESP8266からLCDに送る1回のデータ量を4ビットまたは8ビットで使うことが出来ます。

 今回Arduino IDE標準ライブラリ『LiquidCrystalライブラリ』を使用しますが、データ信号は4ビットと8ビット両方使うことが出来ます。

 今回は4ビットでのデータのやり取りで使用します。
 4ビットでのデータのやり取りでは上位ビットDB4~DB7での接続となり、2回に別けてデータを送信する形となります。(DB0~DB3は使いません)
とは言っても『LiquidCrystalライブラリ』がこのあたりの処理は代わりにやってくれるので難しいことは考えなくてもできちゃいます!

 データ信号ピンDB4~DB7ピン(4本)とRSピン・RWピン・EnableピンをArduinoの適切な位置に接続するだけです。

 それぞれのピンはデジタル信号でのやり取りとなります。
 LiquidCrystalのダウンロード:
 ダウンロード後、下記のところでインストールできます。
■プログラム
#include <LiquidCrystal.h>

// LCD ←→ Arduinoのピンの割り当て
// rs      →   D6
// rw      →   GND
// enable  →   D5
// d4      →   D1
// d5      →   D2
// d6      →   D3
// d7      →   D4
// [構文]LiquidCrystal(rs, rw,  enable, d0, d1, d2, d3, d4, d5, d6, d7)
LiquidCrystal lcd(D6, D5, D1, D2, D3, D4);

void setup() {
  lcd.begin(16, 2);          // LCDの桁数と行数を指定する(16桁2行)
  lcd.clear();               // LCD画面をクリア
  lcd.setCursor(0, 0);       // カーソルの位置を指定
  lcd.print("Hello!");       // 文字の表示
  lcd.setCursor(0, 1);       // カーソルの位置を指定
  lcd.print("ESP8266");      // 文字の表示
}

void loop() {
}

■実物イメージ

 




2022年7月16日土曜日

声感センサー

  今日の話題は一つ安い声感センサー。該当センサーは声の識別ができない、声が有無しか感知できます。声感知スイッチなど場合は適用です。

  ものはこれです。

■配線図


■部品リスト
ESP8266開発ボード
・声感センサー
ブレッドボード
USBケーブル
ジャンパーワイヤー
・抵抗

■プログラム
#define SOUND A0
void setup() {
  Serial.begin(115200);
  pinMode(SOUND, INPUT);
}
void loop() {
  Serial.println(analogRead(SOUND));
  
  delay(1000);
}

■結果

    感度は青半固定ボリュームで動的調整できます。

 シリアルモニタの出力結果


 実物イメージ:


  実験結果によって、やっぱり、該当センサーは声の識別がだめです。


2022年7月15日金曜日

RGB(フルカラー)LEDの様々

■RGBLEDとは

 RGBLEDとは、その名の通りRGB(Red, Green, Blue)の三原色の光が一つの素子で出せるようになっているLEDです。 

■種類

普通のフルカラーRGBLED



・表面実装用フルカラーRGBLED



・マイコン内蔵型フルカラーRGBLED

■部品一覧

ESP8266-CH340開発ボード

カソードコモン型RGBLED

SMDRGBLEDモジュール

WS2812B-5050LED

ブレッドボード

USBケーブル

ジャンパーワイヤー

■サンプル1ー単色切替

 配線図:

 

    プログラム:

#define B 4 // D2
#define R 14 // D5
#define G 12 // D6
void setup() {
    pinMode(R, OUTPUT);
    pinMode(G, OUTPUT);
    pinMode(B, OUTPUT);
}
void loop() {
  digitalWrite(R, HIGH);
  digitalWrite(G, LOW);
  digitalWrite(B, LOW);
  delay(1000);
  digitalWrite(R, LOW);
  digitalWrite(G, HIGH);
  digitalWrite(B, LOW);
  delay(1000);
  digitalWrite(R, LOW);
  digitalWrite(G, LOW);
  digitalWrite(B, HIGH);
  delay(1000);
}

    効果:



 ■サンプル2ー任意色

 ESP8266の一部ピンはPWM出力できます。単純なHIGH、LOWの数字出力ではなく、0-255の範囲が出力可能ので、RGBの各数字を組み合わせて、任意の色が表示できます。

 上記のD2,D5,D6ピンは全部PWM出力が可能です。

 今回はカソードコモン型RGBLEDを利用します。

 


 プログラムは下記ように調整します:

#define B 4 // D2
#define R 14 // D5
#define G 12 // D6
void setup() {
    pinMode(R, OUTPUT);
    pinMode(G, OUTPUT);
    pinMode(B, OUTPUT);
}
void loop() {
  // 紫色
  analogWrite(R, 247);
  analogWrite(G, 130);
  analogWrite(B, 247);
  delay(1000);
}

 効果:

 

効果はちょっと良くないです、マスクして綺麗になる :)

 ■サンプル3ーWS2812B-5050LED

  WS2812B-5050LEDモジュールは内蔵マイコンがあります。

  ピン情報はこのようなことです。


    VCC:5V電源(ESP8266開発ボードのVU(V)ピン)

    GND:GND

    DIN:データインプット

    DOUT:データアウトプット

    DINとDOUTは違いところですが、もう一番重要なことです。

  DINは最大800KBデータがインプットできます、一つのWS2812B-5050LEDを経過すると24B(RGB各8bit)を取得し、残りデータは次のWS2812B-5050LEDに渡します。で、沢山なLEDを同時的にコントロールが可能になりました。

    このイメージです。


 プログラム:
  事前に、ライブラリーに下記を追加します。

#include <Adafruit_NeoPixel.h>

#define PIN 0  // D3
#define NUMPIXELS 1 // LED数

Adafruit_NeoPixel led(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  led.begin();
  led.setBrightness(10);  // 明るさ
}

void loop() {
  led.setPixelColor(0,led.Color(255,0,0));  // 赤
  led.show();
  delay(1000);

  led.setPixelColor(0,led.Color(0,255,0));  // 緑
  led.show();
  delay(1000);

  led.setPixelColor(0,led.Color(0,0,255));  // 青
  led.show();
  delay(1000);

  led.clear();
  led.show();
  delay(1000);
}
 効果:

半田付け能力不足ね。。。:(

2022年7月14日木曜日

時間を表示ーーTM1637LED表示器

 ■TM1637とは

TM1637 は、4桁7セグメントのLEDを簡単に表示するためのモジュールです。 7セグメントLEDはその名の通り、1文字 (または数字) 毎に7セグメントあるので、本来は制御するためにたくさんの入出力が必要になります。

■主な特徴

・電源電圧 3.3/5V

・表示 8セグメント×6ビット

・キー・スキャン 8×2ビット

・輝度 8レベル

・インターフェース CLK、DIO

■配線図

■部品リスト

ESP8266-CH340開発ボード

TM1637LED表示器

ブレッドボード

USBケーブル

ジャンパーワイヤー

■実物イメージ


■プログラム

 サンプルプログラムはTM1637専用のライブラリを利用しているため、下記場所にダウンロードできます。

 https://github.com/avishorp/TM1637

#include <TM1637Display.h>
const int CLK = 14;  //D5
const int DIO = 12;  //D6
TM1637Display display(CLK, DIO); //set up the 4-Digit Display.
void setup() {
  display.setBrightness(0x0a);
}
void loop() {
  uint8_t data[] = { 0xff, 0xff, 0xff, 0xff };
  // コロンマークを点滅する
  display.showNumberDecEx(1840,0x40,true);
  delay(1000);
  display.showNumberDecEx(1840,0x0,true);
  delay(1000);
}

■点滅効果

 


2022年7月4日月曜日

リレーを使ってLEDをコントロール

 ■リレーとは

 「継電器」も呼ばれます。大まかにいうとあることが起こります、それを他に送り伝えて別の動作をさせる。その役目をする部品です。
 コイルと接点(可動接点,固定接点)などで構成され、コイルに一定以上の電流を流すことによって、接点をON/OFFすることができる部品です。

 ■リレーの動作原理

リレーのON時とOFF時の動作原理は以下のようになっています。
ON時
①スイッチをONすると、コイルに電流が流れ、鉄心が磁化する。
②磁化された鉄心に発生した電磁力によって鉄片が引き寄せられる。
③可動接点と固定接点が接触し、リレーがON状態となる。
④その結果、電流が流れて電球が点灯する。

OFF時
①スイッチをOFFすると、コイルに電流が流れなくなるため、磁化しなくなる。
②電磁力が無くなるため、鉄片が元の位置に戻る。
③可動接点と固定接点が離れ、リレーがOFF状態となる。
④その結果、電流が流れなくなりランプが消灯する。

部品リスト:

ESP8266-CH340開発ボード

ブレッドボード

USBケーブル

・5V 1回路リレー

・5MM LED

100Ω抵抗

ジャンパーワイヤー

・スイッチ

■配線図


 回路での普通な接続方法:

■実物イメージ:

 スイッチは押さない場合、LEDは消灯の状態になる 

 スイッチを押すままの場合、


プログラム:

const int RELAY = 5;  //D1
void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  pinMode(RELAY, OUTPUT);
  digitalWrite(RELAY, HIGH);
}
void loop() {
}



シンプルロボットカーセットの使い方

■ マイコン :ESP3266-CH340  シンプルの案として、マイコンは安いESP8266-CH340開発ボードを選びました。該当マイコンもWIFI機能があります。  ドライバーダウンロード場所:    https://sparks.gogo.co.nz/ch340.html...