STM32勉強日記(2022/2/5):obnizとI2C通信
LCDとのI2C通信がどうしても上手く行かない。
そこで、最初にI2Cが出来ているかどうかの確認として、obnizとのI2C通信を行う。
仕様:
slave:obniz側
master:nucleof401
動作:
nucleof401の青ボタンを押すと、コマンドを送信
obnizが受け取ったコマンドをホームページ上に表示する。
作業:
obniz側プログラムの作成
nucleof401側プログラムの作成
nucleof401とobnizを接続
obniz側プログラム
code:javascript
//slave側プログラム
//データの読み取り
//i2c通信開始
//0番ピン:sda
//1番ピン:scl
var i2c = obniz.getFreeI2C(); //
i2c.start({mode: "slave", sda: 0, scl: 1, slave_address: 0x01});
i2c.onwritten = function(data){
console.log(data);
}
obnizのslave_addressっていくつ??
slave_address_length
→未定義
→データが書き込みされたときに呼び出される。断片的にデータを受け取る。
書き込まれたデータが100バイトの場合、56バイトと44バイトで受信される可能性がある。
1024バイトを超えるデータの場合、数バイトがドロップされる(無くなる)可能性がある。
dataを表示すれば、受け取った数値が表示出来る。
obnizプログラム
code:html
code:javascript
//put your obniz ID(obniz IDの入力)
//var obniz = new Obniz("OBNIZ_ID_HERE"); //ホームページを開いたときにobnizの番号を入れる
var obniz = new Obniz("21532033"); //ホームページを開くと、自動的に21532033に接続 //変数宣言
//ホームページの表示
let textno = "数値表示部分(obniz接続中)";
let texton = "testボタンon";
//during obniz connection:obnizの動作処理
obniz.onconnect = async function () {
console.log("開始");
//ボタンの入力設定
//GND:ポート2,信号:ポート3として、入力
var button = obniz.wired("Button", { signal: 2, gnd: 3 });
console.log("ボタン読み込み");
//id:html側の data1を取得し、buttonOnに格納
var buttonOn = document.getElementById("data1");
//I2C通信動作
//slave設定
function i2cProg() {
console.log("通信開始");
var i2c = obniz.getFreeI2C();
//i2c設定
i2c.start({ mode: "slave",sda:0,scl:1,slave_address: 0x01 });
console.log("I2Cデータ取得完了");
//i2cデータ取得
i2c.onwritten = function (data) {
console.log("データ取得");
//入力データを表示
console.log(data);
buttonOn.innerHTML = data;
}
}
i2cProg();
//ボタン入力動作
//ボタンONの時
button.onchange = function (pressed) {
if (pressed === true) {
//textonを表示
buttonOn.innerHTML = texton;
} else if (pressed === false) {
//i2cProg();
//textnoを表示
buttonOn.innerHTML = textno;
}
}
}
mbed側プログラム
code:mbed
#define addr (0x01 << 1) // 8bit address I2C i2c(PB_9,PB_8); //sda,scl
DigitalIn sw1(PC_13);
DigitalOut LED(PA_5);
//アドレス指定
//const int addr = 0x01;
int main(){
while (true) {
if(sw1 == 0){
LED = 1;
i2c.write(addr,cmd,2);
}else{
LED=0;
}
}
}
obnizピン配置
0:sda
1:scl
2:signal
3:gnd
mbed側
ピン:
PB_8:SCL
PB_9:SDA
参考: