Edited at

ラズパイのフロントエンドでマイコン制御するライブラリのラッパーを書いてみた


Chirimen for raspberry Pi とは

ライブラリを読み込むことで、navigator にrequestI2CAccessやrequestGPIOAccessを拡張する、ラズパイのIoT支援ライブラリとでも言いましょうか?


本題であるラッパー

chirimeneckと言います。

それほど難しいことはしていません。

chirimen上でのrequest...Accessは二重の呼び出しができないので、別の定数に返却されるオブジェクトを閉じ込めただけです。

chirimenenck上の関数呼び出しだけで、chirimen上の構文をそのまま使えます。

  <script src="../../polyfill/polyfill.js"></script>

<!-- load driver as you like -->
<script src="../../drivers/i2c-ADT7410.js"></script>
<!-- load driver as you like -->
<script src="../../chirimeneck/gpio.js"></script>
<script src="../../chirimeneck/i2c.js"></script>


//GPIO

(async function () {
const gpio5 = await GPIO(5, "in");
const gpio26 = await GPIO(26, "out");
let v = 0
gpio5.onchange = function (e) {
v ^= v
await gpio26.write(v);
};
})();

///I2C

(async function () {
const adt7410 = await i2cLoadDriver(ADT7410, 0x48);
while (true) {
let value = await adt7410.read();
// do somthing
await sleep(1000);
}
})();

(async function () {
const groveLight = await i2cLoadDriver(GROVELIGHT, 0x29);
while (true) {
try {
var value = await groveLight.read();
// console.log('value:', value);
head.innerHTML = value ? value : head.innerHTML;
await sleep(200);
} catch (error) {
console.log(" Error : ", error);
}
}
})();


ネジのような部品

プログラミングで最も必要なものは、大きな大枠の問題を解決するための、小さな部品です。しかし、絆創膏的なコードを書くという意味ではありません。

問題となる具象を包み込んで、いかなる抽象化を施すかで、ソースコードの質は抜群に上がります。

今回は、自分の勉強のためにも書いてみたようなものですが、皆様のためにもなればと思います。