M5ユニットをESP32用Javascript実行環境で動かすサンプルコード

手元にあるM5ユニットをESP32用のJavascript実行環境で動かしましたので、備忘録として残しておきます。

以下のESP32用のJavascript実行環境のファームウェアを使います。

「電子書籍：M5StackとJavascriptではじめるIoTデバイス制御」

https://poruruba.booth.pm/items/3735175

# サンプルコード

(i)	超音波測距ユニットI/O

https://www.switch-science.com/catalog/7632/

```js:main.js
import * as sonicio from "UnitSonicIo";

sonicio.begin(32, 33);

function loop(){
	var distance = sonicio.getDistance();
	console.log(distance.toFixed(2) + 'mm');
	delay(1000);
}
```

(ii)	振動モータユニット

https://www.switch-science.com/catalog/6065/

```js:main.js
import * as ledc from "Ledc";

ledc.setup(0, 10000, 10);
ledc.attachPin(32, 0);

function loop(){
	ledc.write(0, 512);
	delay(1000);
	ledc.write(0, 0);
	delay(1000);
}
```

(iii)	カラーセンサユニット

https://www.switch-science.com/catalog/5218/

```js:main.js
import * as color from "UnitColor";

color.begin();

function loop(){
	var data = color.getRawData();
	console.log(JSON.stringify(data));
	delay(1000);
}
```

(iv)	環境センサユニット

https://www.switch-science.com/catalog/5690/

```js:main.js
import * as env from "Env";

function loop(){
	var temp = env.dht12_readTemperature();
	var humidity = env.dht12_readHumidity();
	console.log(temp.toFixed(2) + "℃ " + humidity.toFixed(2) + "%");
	delay(1000);
}
```

(v)	赤外線送受信ユニット

https://www.switch-science.com/catalog/5699/

受信側

```js:main.js
import * as ir from "Ir";

ir.recvBegin(33);
ir.recvStart();

function loop(){
	var data = ir.checkRecv();
	if( data )
		console.log('received: ' + data);
}
```

送信側。M5Stick-C搭載の赤外線送信ポートを利用。

```js:main.js
import * as ir from "Ir";

ir.sendBegin(9);

var counter = 0;

function loop(){
	ir.send(counter++);
	delay(1000);
}
```

(vi)	光センサユニット

https://www.switch-science.com/catalog/4051/

```js:main.js
import * as gpio from "Gpio";

gpio.pinMode(32, gpio.INPUT);

function loop(){
	var dout = gpio.digitalRead(32);
	var aout = gpio.analogRead(33);
	console.log(dout  + ', ' + aout);
	delay(1000);
}
```

(vii)	ジェスチャーユニット

https://www.switch-science.com/catalog/7533/

```js:main.js
import * as gesture from "UnitGesture";

gesture.begin();

function loop(){
	var ges = gesture.getGesture();
	if( ges != gesture.None )
		console.log(gesture.getDescription(ges));
}
```

(viii)	RGB LEDユニット

https://www.switch-science.com/catalog/6550/

```js:main.js
import * as pixels from "Pixels";

pixels.begin(32, 3);
var color = 0xff0000;
var counter = 0;

function loop(){
	counter++;
	pixels.setPixelColor(0, ((counter % 3) == 0) ? color : 0);
	pixels.setPixelColor(1, ((counter % 3) == 1) ? color : 0);
	pixels.setPixelColor(2, ((counter % 3) == 2) ? color : 0);
	delay(1000);
}
```

(ix)	ファンユニット

https://www.switch-science.com/catalog/6213/

```js:main.js
import * as ledc from "Ledc";

ledc.setup(0, 10000, 10);
ledc.attachPin(32, 0);

function loop(){
	ledc.write(0, 512);
	delay(5000);
	ledc.write(0, 0);
	delay(2000);
}
```

(x)	PIRセンサユニット

https://www.switch-science.com/catalog/5697/

```js:main.js
import * as gpio from "Gpio";

gpio.pinMode(33, gpio.INPUT);

var last_value = -1;

function loop(){
	var value = gpio.digitalRead(33);
	if( value !=last_value ){
		if( value )
			console.log('detected');
		else
			console.log('lost');
		last_value = value;
	}
}
```

(xi)	ガスセンサユニット

https://www.switch-science.com/catalog/6619/

```js:main.js
import * as gas from "UnitGas";

gas.begin();

function loop(){
	var value = gas.IAQmeasure();
	console.log("TVOC=" + value.TVOC + " eCO2=" + value.eCO2);
	delay(1000);
}
```

(xii)	回転角ユニット

https://www.switch-science.com/catalog/6551/

```js:main.js
import * as gpio from "Gpio";

var last_value = -1;

function loop(){
	var value = gpio.analogRead(33);
	if( last_value < 0 || Math.abs( last_value - value ) > 50 ){
		console.log(value);
		last_value = value;
		delay(500);
	}
}
```

(xiii)	フェーダーユニット

https://www.switch-science.com/catalog/7479/

```js:main.js
import * as pixels from "Pixels";
import * as gpio from "Gpio";

pixels.begin(32, 14);
var unit = Math.floor(4096 / (14 + 1));
var color = 0x00ff00;
var last_value = -1;

function loop(){
	var value = gpio.analogRead(33);
	if( last_value < 0 || Math.abs(last_value - value) > 20 ){
		for( var i = 0 ; i < 14 ; i++ )
			pixels.setPixelColor(i, (((i + 1) * unit) <= value) ? color : 0x000000);
		last_value = value;
	}
}
```

# 本ファームウェアのサポートサイト

〇電子書籍：M5StackとJavascriptではじめるIoTデバイス制御

https://poruruba.booth.pm/items/3735175

〇ファームウェアのサポートサイト

https://github.com/poruruba/QuickJS_ESP32_IoT_Device_M5Unified

以上