2022年8月28日日曜日

dotmatrix/jdk-linux/7seg-led(1or4)/maqueen line tracer

5x7ドットマトリクスLEDで文字を出力してみる - GEEKY Fab 残像効果利用

LEDで文字を表現!マトリクスLEDの使い方 | Device Plus - デバプラ  これは8x8

----------------------------------------------------

https://www.ingenious.jp/articles/howto/raspberry-pi-howto/install-java/#toc1

これはkit-scopeのために必要

-------------------------- 4桁7セグ ---------------------------------------

https://omoroya.com/arduino-lesson25/ カソードコモンで各LEDに抵抗をおく

ーーーーーーー 1桁7セグ 10秒タイマ ーーーーーーーーーーーーーーーーーーーーーー

#define SRCLK   (7)
#define RCLK    (6)
#define SER     (5)

// 点灯パターン(1=点灯, 0=消灯)
//const uint8_t one    = 0b00101000;
//const uint8_t two    = 0b11001101;
//const uint8_t three  = 0b01101101;
//const uint8_t four   = 0b00101011;
//const uint8_t five   = 0b01100111;
//const uint8_t six    = 0b11100111;
//const uint8_t seven  = 0b00101100;
//const uint8_t eight  = 0b11101111;
//const uint8_t nine   = 0b00101111;
//const uint8_t zero   = 0b11101110;
//const uint8_t dp     = 0b00010000;

uint8_t numbers[11] = {0b11101110,0b00101000,0b11001101,0b01101101,0b00101011,0b01100111,0b11100111,0b00101100,0b11101111,0b00101111,0b00010000};


void setup() {
  Serial.begin(9600);
  pinMode(SRCLK, OUTPUT);
  pinMode(RCLK,  OUTPUT);
  pinMode(SER,   OUTPUT);
  digitalWrite(SRCLK, LOW);
}

void dispdp(){
  // シフトレジスタに1バイトのデータを送信する
  Serial.println("dp");
  shiftOut(SER, SRCLK, LSBFIRST, numbers[11]);
  // RCLK信号を送り、QA~QHのストレージレジスタに反映させ、出力する
  digitalWrite(RCLK,  LOW);
  digitalWrite(RCLK,  HIGH);
  delay(1000);
}

void dispn(int i){
// シフトレジスタに1バイトのデータを送信する
  Serial.println(i);
  shiftOut(SER, SRCLK, LSBFIRST, numbers[i]);
  // RCLK信号を送り、QA~QHのストレージレジスタに反映させ、出力する
  digitalWrite(RCLK,  LOW);
  digitalWrite(RCLK,  HIGH);
  delay(1000);
 
}

void loop() {
  // シフトレジスタに1バイトのデータを送信す
  //shiftOut(SER, SRCLK, LSBFIRST, uint8_t(numbers[0]));
  // RCLK信号を送り、QA~QHのストレージレジスタに反映させ、出力する
  //digitalWrite(RCLK,  LOW);
  //digitalWrite(RCLK,  HIGH);
  //delay(1000);
  for (int i = 0; i<11; i++){
    dispn(i);
  }
  dispdp();
}


ーーーーーcathode common 7seg led 1pcsーーーーーーーーーーーーー


https://rage1blog.com/arduino_how-to-use_7-segment-ledc-551srd_shift-register_74hc595/ 

【Arduino】7セグメントLED(C-551SRD)の使い方【シフトレジスタ(74HC595)との組み合わせまで】

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

Arduino電子工作-7セグメントLED制御方法│takuのアトリエ (taku-info.com) が基本




void setup(){ //ただし9ピンは小数点なので、本スケッチでは不使用
  //2ピンから9ピンを出力へ
  for(int i=0;i<7;i++){
    pinMode(i+2,OUTPUT);
  }
}

//LEDレイアウトを配列で定義
boolean Num_Array[10][7]={
  {1,1,1,1,1,1,0}, //0
  {0,1,1,0,0,0,0}, //1
  {1,1,0,1,1,0,1}, //2
  {1,1,1,1,0,0,1}, //3
  {0,1,1,0,0,1,1}, //4
  {1,0,1,1,0,1,1}, //5
  {1,0,1,1,1,1,1}, //6
  {1,1,1,0,0,1,0}, //7
  {1,1,1,1,1,1,1}, //8
  {1,1,1,1,0,1,1}  //9
};

//LEDを表示する関数を定義
void NumPrint(int Number){
  for (int j=0; j<7; j++){
    digitalWrite(j+2,Num_Array[Number][j]);
  }
}

//全てのLEDを消灯させる
void off7SegLED(){
  for(int k=0;k<7;k++){
    digitalWrite(k+2,LOW);
  }
}

void loop(){
  for(int n=0;n<=9;n++){
    NumPrint(n);//iを点灯
    delay(2000);
    off7SegLED();//消灯
    delay(50);
  }
}


ーーーーーーーーーーmaqueen 自律ライントレーサ ーーーーーーーーーーーーーーー

拡張機能でmaqueenを入れないとだめよ 最終版は以下の通り

 input.onButtonPressed(Button.Afunction () {

    走行モード = 1
})
let 右センサ = 0
let 左センサ = 0
let 障害物までの距離 = 0
let 走行モード = 0
maqueen.motorStop(maqueen.Motors.All)
let  = 0
let  = 1
走行モード = 0
let 全速力で = 30
let 直進中だった = 1
let 左折中だった = 2
let 右折中だった = 3
let 過去の状態が = 直進中だった
while (走行モード == 0) {
    basic.showIcon(IconNames.Heart)
    basic.showIcon(IconNames.SmallHeart)
}
basic.showIcon(IconNames.Happy)
maqueen.motorRun(maqueen.Motors.All, maqueen.Dir.CW20)
basic.forever(function () {
    if (走行モード == 1) {
        障害物までの距離 = maqueen.Ultrasonic(PingUnit.Centimeters)
        if (障害物までの距離 < 10) {
            maqueen.motorStop(maqueen.Motors.All)
            while (障害物までの距離 < 12) {
                basic.pause(200)
                障害物までの距離 = maqueen.Ultrasonic(PingUnit.Centimeters)
            }
            maqueen.motorRun(maqueen.Motors.All, maqueen.Dir.CW30)
        }
    }
    左センサ = maqueen.readPatrol(maqueen.Patrol.PatrolLeft)
    右センサ = maqueen.readPatrol(maqueen.Patrol.PatrolRight)
    if (左センサ ==  && 右センサ ==  && 過去の状態が == 直進中だった) {
        maqueen.motorRun(maqueen.Motors.All, maqueen.Dir.CW全速力で)
    } else if (左センサ ==  && 右センサ ==  && 過去の状態が == 右折中だった) {
        maqueen.motorRun(maqueen.Motors.M2, maqueen.Dir.CW0)
        maqueen.motorRun(maqueen.Motors.M1, maqueen.Dir.CW全速力で)
        過去の状態が = 右折中だった
    } else if (左センサ ==  && 右センサ ==  && 過去の状態が == 左折中だった) {
        maqueen.motorRun(maqueen.Motors.M2, maqueen.Dir.CW全速力で)
        maqueen.motorRun(maqueen.Motors.M1, maqueen.Dir.CW0)
        過去の状態が = 左折中だった
    } else if (左センサ ==  && 右センサ == ) {
        if (過去の状態が == 直進中だった) {
            maqueen.motorRun(maqueen.Motors.M2, maqueen.Dir.CCW全速力で)
            maqueen.motorRun(maqueen.Motors.M1, maqueen.Dir.CCW全速力で)
        } else if (過去の状態が == 右折中だった) {
            maqueen.motorRun(maqueen.Motors.M2, maqueen.Dir.CCW全速力で)
            maqueen.motorRun(maqueen.Motors.M1, maqueen.Dir.CW全速力で)
        } else if (過去の状態が == 左折中だった) {
            maqueen.motorRun(maqueen.Motors.M2, maqueen.Dir.CW全速力で)
            maqueen.motorRun(maqueen.Motors.M2, maqueen.Dir.CCW全速力で)
        }
    }
})
basic.forever(function () {
    if (maqueen.readPatrol(maqueen.Patrol.PatrolLeft) == 1 && maqueen.readPatrol(maqueen.Patrol.PatrolRight) == 0) {
        maqueen.motorRun(maqueen.Motors.M2, maqueen.Dir.CW0)
        maqueen.motorRun(maqueen.Motors.M1, maqueen.Dir.CW30)
    }
})

2022年8月23日火曜日

digital audio LM286,A-volume,miniFM?,SSR?,arduinoUnoべからず集

-----------------lm386----------------------------

電源電圧は9vが必要! パソコンの音源はつかわないこと! スマホ音源に限定!

Audio Amplifier | simple audio amplifier using LM386 ic

https://www.youtube.com/watch?v=26v3ekaK_HQ :: なんとコンデンサ1個だけ!

 https://www.zea.jp/audio/schematic/sc_file/009.htm これはコンデンサ2個

LM386で自作ヘッドホンアンプを作ってみた (101010.fun) 

コンデンサ3個 Aカーブヴォリュームの説明あり

LM386 を使ったオーディオアンプ (nara-edu.ac.jp) 

コンデンサ4個 ゾーベルネットワークの説明あり

How To Make A Radio Transmitter With Only 2 Components - Great Idea You Haven't Seen Before  https://www.youtube.com/watch?v=7MavXzTjP04&t=51s 

FM送信 短波ラジオ必要 お高い

https://akizukidenshi.com/catalog/g/gK-00203/ 

SSRキット 危険!
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

https://kghr.blog.fc2.com/blog-entry-126.html :: 内蔵dac のサンプル

音声データを用意すれば簡単みたい wavを得るにはaudacityなどが必要

https://otomizu.work/2019/10/22/esp32-spiffs/ spiffsのやりかた

スケッチフォルダにdataフォルダをつくり、そこにsample.mp3をいれ

あとはupload toolをたたくだけ

https://wak-tech.com/archives/923 :: mp3をspiffsに内蔵して内蔵DACとアンプで再生.

https://blog.techlab-xe.net/esp32-play-mp3sound/ 外付けDAC スピーカいいと音でかい

#include "SPIFFS.h"

#include "AudioFileSourceSPIFFS.h"

#include "AudioGeneratorMP3.h"

#include "AudioOutputI2S.h"

AudioGeneratorMP3* pMp3;

AudioFileSourceSPIFFS* pFile;

AudioOutput* pOutput;

void setup() {

  Serial.begin(115200);

  SPIFFS.begin();

  pFile = new AudioFileSourceSPIFFS("/sound.mp3" );

  pOutput = new AudioOutputI2S();

  pMp3 = new AudioGeneratorMP3();

  pMp3->begin(pFile, pOutput);

}


void loop() {

  if( pMp3->isRunning() )

  {

    if( !pMp3->loop() )

    {

      pMp3->stop();

      Serial.println("MP3 end");

    }

  } else {

    delay(100);

  }

}

ーーーーー参考文献ーーーーーーーーーーーーーーーーーーー
https://www.amazon.co.jp/-/en/Max98357-Amplifier-Breakout-Interface-Decoder-Unfiltered/dp/B0932TJ559/ref=sr_1_6?keywords=max98357a+%E6%90%AD%E8%BC%89%E7%94%A8+d+%E7%B4%9A%E3%82%A2%E3%83%B3%E3%83%9A%E3%82%A2&qid=1662814035&sr=8-6  購入品

https://datasheets.maximintegrated.com/jp/ds/MAX98357A-MAX98357B_jp.pdf

これは、今回買ったモノラルのI2S-DACアンプの説明書

http://www.picfun.com/picclub/dai73/I2C.pdf i2cからi2sを語っており有益だった

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

https://ideahack.me/article/31 これだけはやるな 

5vpinに5v以上をかけてはいけないなど、やりがちなことが書いてある

2022年8月18日木曜日

ArdNano::papirs,ws2811,pir,hc-sr04,neopixel,rgb,lcd1602,lm61/ch341-china-risk

焦電型赤外線センサ PaPIRs を使う - Qiita を参考に結線、10KΩのかわりに51kΩでも

電源は5VからでOKだった これとSSRを併用すると面白いかも


https://rephtone.com/electronics/arduino-neopixel/ ws2811 and FastLED lib

長いの内側がGnd、そのとなりがV(1個なら5でも3でも可),

そのとなりがDinつまりDATA_PIN 長いの外側はDoでとなりにつなぐ場合に使用

FastLEDサンプルのBlink.inoのうちFastLED.addLeds<WS2811,DATA_PIN,RGB>

(leds,NUM_LEDS)を有効にする 1個だけなら制限抵抗なしでOKだった

ーーーーーーーーーーーーーーーーーーーーーーーー

Arduino with PIR Motion Sensor - Arduino Project Hub ナイスコード例

int led = 12;                // the pin that the LED is atteched to
int sensor = 5;              // the pin that the sensor is atteched to
int state = LOW;             // by default, no motion detected
int val = 0;                 // variable to store the sensor status (value)

void setup() {
  pinMode(led, OUTPUT);      // initalize LED as an output
  pinMode(sensor, INPUT);    // initialize sensor as an input  Serial.begin(9600);        // initialize serial
}

void loop(){
  val = digitalRead(sensor);   // read sensor value
  if (val == HIGH) {           // check if the sensor is HIGH
    digitalWrite(led, HIGH);   // turn LED ON
    delay(500);                // delay 100 milliseconds 
    
    if (state == LOW) {
      Serial.println("Motion detected!"); 
      state = HIGH;       // update variable state to HIGH 頻回のdetect防止になる
    }

} else { // sensor val is LOW digitalWrite(led, LOW); // turn LED OFF delay(500); // delay 500 milliseconds if (state == HIGH){ Serial.println("Motion stopped!"); state = LOW; // update variable state to LOW 頻回のstop防止になる  } }}


超音波センサHC-SR04とArduinoで距離を測定する (rb-station.com)

赤外線距離センサ(GP2Y0A21YK)を使ってみる | 物を作る者 (novicengineering.com) 

超音波のほうが赤外線より感度いい、レーザーは目にあたるとこわい        

ArduinoでNeoPixelを動かす - Qiita

RGBフルカラーLEDの使い方 [Arduino] (petitmonte.com) R,GND,G,Bの順(GND最長)



ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

1602A I2C アダプターの利用 - Arduino - 基礎からの IoT 入門 (keicode.com)

 Arduinoで1602 I2C液晶モジュールを使う (7ujm.net)

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

http://zattouka.net/GarageHouse/micon/Arduino/Temp/Temp.htm :: lm61 

--------------------ch341-----------------------------------------------------

ch341ser_linux driver of linux needs fix !  make.cがコンパイル不可にて

https://ameblo.jp/sy-eng/entry-12457650860.html を参考に

#include <linux/sched/signal.h>をいれ

wait_queue_t wait;を wait_queue_entry_t wait;に変更

あとはsudo make, sudo make loadで成功した!

chipはatmega328(old bootloader)でなく普通のatmega328pでいけた at ubuntu20

ubuntu22ではhttps://github.com/gorgiaxx/CH34x-Driver-Linuxでいってみた

--------------------china risk---------------------------------------------------------

 arduino nanoは長期運用でダイオードが焼けるとのdecoさんの指摘もあり、オシロ専用機?

 ::中華製nanoが使用している電源電流の逆流防止用ダイオードのキャパが非常に小さく、ちょっとした小型サーボなどを利用する際にボードの電源を使うとすぐに壊れてしまう点です。本家のNanoはある程度電流が流れても大丈夫なダイオードを使用していますが、中華製nanoは30mAを超えると簡単に焼けてしまうダイオードが使われています。」という記事。運用時には外部電源を確実にする必要がありそうです。

https://ameblo.jp/gameprograming/entry-12601817927.html

https://www.jh4vaj.com/archives/25690

2022年8月13日土曜日

obniz::slack-temp-10min(browser app), serverless event vs deep-sleep browser app

((obniz-line-notify))

1.https://uepon.hatenadiary.com/entry/2021/04/13/234404

const lineNotify = require('line-notify-nodejs')(''); // 先ほど生成したトークン

lineNotify.notify({

  message: 'send test',

}).then(() => {

  console.log('send completed!');

});

2.https://qiita.com/mochan_tk/items/e1f390cc88046f92eec6 :: obnizからline

これもnode.jsでの実行となっている

-----------------ステッピングモータ----------------------

https://take6shin-tech-diary.com/obniz-steppingmotor/ 手持ちのarduino用の

ステッピングモータでできた 5本つかうので、のこり6線で何ができるだろうか?

ーーーーーーーー赤外線リモコンーーーーーーーーーーーーーーーーーーーー

消灯点灯まではリモコンできたが、エアコン学習操作はできなくなっていた なんで?

しょうがないからswitch bot hub miniを買った 結果、正解だった 超かんたん

-----------------ifttt obniz tweet  pir -----------------------------------------------------

https://blog.obniz.com/make/linking-motion-sensor-and-sns

このほかにtemperature のアプレットも作っているが。。。。複雑やな

esp32//line notifyとかslackダイレクトのほうが簡単みたい

---------------------------------------------------------------

以下のコードでライトは簡単につく 用意ができるまでdelayを入れるのがコツ

しかし、ダイキンはひろってくれない・・・・


line-notifyはnode.jsでないとうまくいかんようだ runkitの学習が今後の課題

twitterは、ツイートで喜ぶロボットとかがあるが。。。。めんどげ

google assistant で、サーボを動かす。。。。めんどげ

slackに温度情報を送るのは成功した

// https://blog.obniz.com/make/notify-slack-when-hightemperature が原本だが

サーバレスイベントだったのでブラウザアプリに書き換えた なお、一回起動したら、閉じておく!

そうでないと10分ごとの報知ができんみたい。。。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link
rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
/>
<script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
<script
src="https://unpkg.com/obniz@3.x/obniz.js"
crossorigin="anonymous"
></script>
</head>
<body>
<script>
const obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function() {
let tempsens = obniz.wired("LM61", { gnd: 0, output: 1, vcc: 2 });
let temp = await tempsens.getWait();
if (temp >= 20) {
temp = Math.floor(temp * 10) / 10;
sendToSlack(temp);
}

function sendToSlack(temp) {
let url = "https://hooks.slack.com/services/????"; // ??? is slack webhooks url
let data = {
text: "室温が高温になっています。" + temp + "℃"
};

let dataJson = JSON.stringify(data);

$.ajax({
type: "POST",
dataType: "json",
url: url,
processData: false,
data: "payload=" + dataJson
}).then(
function(data) {},
function(XMLHttpRequest, textStatus, errorThrown) {
console.log("post to bot");
}
);
}
};
</script>
</body>
</html>
// sereverless eventで10分ごとに実行とする以下の設定



---------------------------------------------------------------------------------------- 

https://qiita.com/y-hira/items/de7e8d5c2e8e4c1c4acd でサーバレスイベントを体験

obniz_ifttt.htmlは以下のとおりで、サーバレスイベントで10分ごとに実施にする

以下のところでvalue2,value3は取り除いた



<html>

<head>

    <meta charset="utf-8">

    <meta name="viewport" content="width=device-width, initial-scale=1">

    <script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>

    <script src="https://unpkg.com/obniz@latest/obniz.js"></script>

</head>

<body>

    <div id="obniz-debug"></div>

    <h1>obniz IFTTT sensor logger</h1>

    <script>

        var obniz = new Obniz("OBNIZ_ID_HERE");

     //obnizのIDを指定してください ここがブラウザアプリとの違い!

        var lm61;

        var event_name = "obnizLM61";

//IFTTTのWebhooks - Receive a web requestで指定したEvent Nameを指定してください。

        var key = "XX_XXXXXXXXXXXX";

//IFTTTのWebhooksのDocumentationにあるYour keyを指定してください。


var url = "https://maker.ifttt.com/trigger/" + event_name + "/with/key/" + key;

obniz.onconnect = async function () {

    lm61 = obniz.wired("LM61", { gnd: 0, output: 1, vcc: 2 });

    send_sensor_value();

} // obnizコネクト時の非同期実行


async function send_sensor_value() {

  const temp = await lm61.getWait();

  var data = { value1: temp }; // iftttでセットしたのはvalue1のみだから!

  $.get(url, data).done(function (ret) { console.dir(ret); });

}

</script>

</body>

</html>

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

https://maker.ifttt.com/trigger/obnizLM61つまりイベント名/with/key/ウエブフック暗号キー/?value1=30

で無事にできたので https://blog.obniz.com/make/saving-temperature-logger-1y にでていた

コードを暗号キー直書きに改変した以下のブラウザアプリをつくり、アプリ設定は

obniz Board 1Yのスリープ機能を使って、デバイスがオンラインになるたびにクラウドで

プログラムを実行したいので、「デバイスがオンライン時に実行」にチェックを入れます。

念の為、ブラウザ実行にもチェックして、一回実行しておく webhook,switchはスリープで

チェックしても無効になるっぽい 定期実行はなしにした コードはこれ

<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" />
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.min.js"></script>
<script src="https://unpkg.com/obniz@3.x/obniz.js" crossorigin="anonymous" ></script>
</head>
<body>
<div id="obniz-debug"></div>
<script>
const IFTTT_SECRET_KEY = "dWU1hX3AUC9-ujae9y-7hc";
const IFTTT_EVENT = "obnizLM61";
let obniz = new Obniz("OBNIZ_ID_HERE");

//Timeout 25s
let tid = setTimeout(() => {
obniz.sleepMinute(10);
}, 25000);

obniz.onconnect = async() => { // main part
var tempsens = obniz.wired("LM61", { gnd:0 , output:1, vcc:2});
var temp = await tempsens.getWait();
//make a data to send
let dataToSend = {
'value1': temp
};

//IFTTT request
$.get(
`https://maker.ifttt.com/trigger/${IFTTT_EVENT}/with/key/${IFTTT_SECRET_KEY}`,
dataToSend
);

//set to wake up every 10 minutes
obniz.sleepMinute(10);

//program finish wait...
await obniz.wait(1000);

clearTimeout(tid);
if (Obniz.App.isCloudRunning()) {
Obniz.App.done({
status: 'success'
});
}

}; // end of main part
</script>
</body>
</html>

2022年8月11日木曜日

switchbot hub mini / with LM61 to Line notify by esp32

 カスタマイズでボタンを学習し、テストボタンを押してOKなら、

同一画面の下にある保存を押す! 下に保存があるのを、よく忘れ詰まる! 注意。

なお、新規機種を追加するときは、ハブミニ以外のすべての機器もオンライン表示でないと

うまくいかん しばらく待っても、オンラインとならない場合は、スマホを再起動!

--------------------------lm61 on esp32

https://www.opensourcetech.tokyo/entry/20200301/1583065155 を参考に

#define LM61BZ 25  //①温度センサーで使うピンの定義

void setup() {               //②一度のみ実行される処理

 Serial.begin(115200);

 while(!Serial);

 pinMode(LM61BZ,INPUT);

}

void loop() {

int e = analogRead(LM61BIZ);

 float Vout = e / 4095.0 * 3.3 + 0.1132; // ADC 微調整

 float temp = (Vout - 0.6) / 0.01; // オフセット微調整

 Serial.print("Temp: ");

 Serial.println(temp);

  delay(1000);

}

------------------------------

https://www.ekit-tech.com/?p=3434 :: 1分間に何度でもLineできるようだが、毎分ごとに

しておくほうが無難 下の図で、タクトスイッチ、左側は上下でつながり、右側もそう

押されないときはGndにプルダウンされているが、押されると左右がつながり3v3が

Pin34に出現する





#include <WiFi.h> #include <WiFiClientSecure.h> // WiFi設定 const char* ssid = "your-ssid"; const char* password = "your-password"; // LINE Notify設定 const char* host = "notify-api.line.me"; const char* token = "your-token"; const char* message = "ピンポーン"; // スイッチに使用するPinの設定 int sw_pin = 34; void setup() { // スイッチPinを入力に設定 pinMode(sw_pin,INPUT); // シリアルモニタの通信速度 Serial.begin(115200); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); // WiFi接続 WiFi.begin(ssid, password); // WiFiの接続状態を確認 while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected."); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } // line通知 void send_line() { // HTTPSへアクセス(SSL通信)するためのライブラリ WiFiClientSecure client; // サーバー証明書の検証を行わずに接続する場合に必要 client.setInsecure(); Serial.println("Try"); //LineのAPIサーバにSSL接続(ポート443:https) if (!client.connect(host, 443)) { Serial.println("Connection failed"); return; } Serial.println("Connected"); // リクエスト送信 String query = String("message=") + String(message); String request = String("") + "POST /api/notify HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Authorization: Bearer " + token + "\r\n" + "Content-Length: " + String(query.length()) + "\r\n" + "Content-Type: application/x-www-form-urlencoded\r\n\r\n" + query + "\r\n"; client.print(request); // 受信完了まで待機 while (client.connected()) { String line = client.readStringUntil('\n'); if (line == "\r") { break; } } String line = client.readStringUntil('\n'); Serial.println(line); } // スイッチの変数宣言 int sw_val = 0; void loop(){ // スイッチの状態を読み取る sw_val = digitalRead(sw_pin); // スイッチがONのとき if (sw_val) { // Lineにリクエストを送信する send_line(); } }