【ESP32】6軸センサ・加速度・ジャイロセンサー MPU6050のライブラリー VL53L1X TOFセンサ HY-SRF05超音波センサ【Arudino】

スポンサーリンク
広告

ESP32Sというモジュールで遊んでいます

【( ..)φメモメモ】HiLetgo® ESP32 ESP-32S NodeMCU開発ボード2.4GHz WiFi + Bluetoothデュアルモード【安いなぁ】
ESP32のボード まえにESP8266のボードももっててATコマンドが使えるってことで少し遊んでいました。これかった時は、もう少し値段高...

こやつ、BlueToothもちゃんと動くし、Wifiもちゃんと動く。。BluetoothだとUARTのような感じで動かせるし、Wifiだと、ServerになってHTTPでアクセスして、ブラウザーで中身をみるとか操作もできるので、面白いので、こないだから、もちろんGPSもですけど。。いろんなセンサーを付けて遊んでいます。

でもESP8266やArduino本体と、ESP32Sは少し違うので、そのあたりいろいろ調べたりしないと動かないことや、センサーも安物ばかり買っているので、説明書もなく。。しかも。。動くかどうか分からない状態から動かすので。。次動かす時に忘れそうなので、その忘備録です。

ESP32S Sketch書き込みでの注意

☆書き込めないエラーの時は、IO0スイッチを押しながら書き込む

☆5V供給のセンサなどをつけたままにしていると書き込めない時がある。 5V供給を外す

I2Cのピン

僕のもっているESP32Sは、ESP32 DEV MODULEやNODE 32sという種類のボードらしいです(笑)

http://wiki.ai-thinker.com/esp32/boards/nodemcu_32s

このピン配置で、Wire SCL Wire SDAってなっている GPIO 22、21が Wire.hで使う時にデフォルトのI2CのTX,RXになるようです。 書いてある通りなんですが(笑) GPIO1、3でも動きそうな気がするからって、動作確認のためにサンプルのSketchでサクッと動かそうとすると、ハマります(笑)

ESP8266だと、IO4、IO5で、Arduinoだと、A4、A5とかの表記になっているものが多いですね。

センサーのI2Cのアドレスを探すSketchは、こんなのですが、どこにもピンの位置を指定するところがないですもんね(笑)

/* this program is to detect IC2 device connected to Arduino */
#include <Wire.h>

void setup()
{
Wire.begin();

Serial.begin(115200);
Serial.println("\nI2C Scanner");
}


void loop()
{
byte error, address;
int nDevices;

Serial.println("Scanning...");

nDevices = 0;
for(address = 1; address < 127; address++ )
{
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the address.
Wire.beginTransmission(address);
error = Wire.endTransmission();

if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");

nDevices++;
}
else if (error==4)
{
Serial.print("Unknow error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
} 
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");

delay(1000); // wait 5 seconds for next scan
}

I2Cで動くものは、まずこれで、アドレスを探すってことをします。

これでも動かない時は、Raspberry Piに接続して。。

<sudo apt-get install i2c-tools>が入っている前提ですが。。

sudo i2cdetect -y 1

で調べます(笑) これで動かなければ、センサー死んでます(笑) で、Raspberry Piで動くのにArduinoで動かないって時は、ライブラリーを疑います。というかArduinoやESP8266、ESP32関係のライブラリー多すぎて、分からなくなりますねぇ~ メーカーの正式なサイトの情報が間違っていたりするし(笑)

VL53L1X TOFセンサの場合

こいつI2Cアドレスを書き換えられるようなことが書かれていますが、いろいろやってみましたが、書き換えられないですね。 何個も使う場合は、PCAL9555などを使うしかないですね。

PCAL9555APW – スイッチサイエンス

それと、Arduinoライブラリーの方も、Pololuという方を選ばないと動かないですねぇ。。 Sparkfunにもあるので、そっちでやろうとして、うまく動きませんでした。

pololu/vl53l1x-arduino
Pololu Arduino library for VL53L1X time-of-flight distance sensor - pololu/vl53l1x-arduino

MPU6050の場合

GY521と表記があるので、それで調べるといいのかもしれないですが。。

これにはいろいろハマりました(笑) なぜかは分かっていませんが、現時点では、このライブラリーなら動きます(笑)

jarzebski/Arduino-MPU6050
MPU6050 Triple Axis Gyroscope & Accelerometer Arduino Library - jarzebski/Arduino-MPU6050

Arduino Play Groundというサイトの情報だと

Arduino Playground - MPU-6050

I2Cdevlib.hにMPU6050があったので、これにかなり引きずられてしましました(笑)

GY-521 (3軸加速度センサ/ジャイロ・モジュール) を Arduino で利用する方法 - 基礎からの IoT 入門
IoT に初めて取り組む人向けの超簡単な電子工作入門サイト。電子工作の基礎から Arduino を利用したプログラミング等をわかりやすく解説

ESP8266やArduinoなら上記のように、これで動くみたいで、Googleで検索すると、これで動くように書かれております。

また、それを改造したものが、Arduino IDE のライブラリーマネージャーにも出てくるので、ややこしいんですが。。

tockn/MPU6050_tockn
Arduino library for easy communicating with MPU6050 - tockn/MPU6050_tockn

でも、これのサンプルがもう動かないんですよねぇ~ 中身までしっかり読み込んでないので分からないですけど。。とりあえず、間違わないように覚えておかないと(笑)

でも、センサーから出てきた値、なんかおかしいような気もする(笑)

200円くらいなもんなんで、仕方ないのか?(笑) それとも。。何か裏技あるのかも(笑)

HY-SRF 05超音波センサ の場合

ESP32: Pocket Size Distance Measuring and Logger
ESP32: Pocket Size Distance Measuring and Logger: This is a sonic (sound-based), pocket-size measuring tool, accurate up to 3mm. It is useful for applications w...
Distance Measurement with an Ultrasonic Sensor HY-SRF05
Measure the world around you. By Nicholas_N.
これらを参考にして。。ピンの配置は以下の通り
HY-SRF05 ESP32S
VCC 5V
GND GND
Trig GPIO2
Echo GPIO5

スケッチは 以下で ㎝単位で測れます。

4mまでとありますが、3mくらいまでの感じです。3つ買いましたが3つとも全然違う値を出しているところは、個性というべきか??(笑)おいおぃ。。

// defines pins numbers
const int trigPin = 2;
const int echoPin = 5;

// defines variables
long duration;
int distance;

void setup() {
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin, INPUT); // Sets the echoPin as an Input
Serial.begin(115200); // Starts the serial communication
}

void loop() {
// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);

// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);

// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);

// Calculating the distance
distance= (duration/2)/29;

if (distance >=300 || distance <=0){
  Serial.println("Out of range");
}
else{
// Prints the distance on the Serial Monitor
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
}
delay(60);
}

コメントを残していただけるとありがたいです

Loading Facebook Comments ...
%d人のブロガーが「いいね」をつけました。