※ 備忘録です。使えたらコピペして使ってね。できれば、毎回HPを開いてくれると嬉しいです。データ データ2
// ピンの定義
const int switchPins[] = {2, 3, 4, 5}; // スイッチピン
const int ledPins[] = {6, 7, 8, 9}; // LEDピン
const int buzzerPin = 10; // ブザーのピン
const int segPins[] = {11, 12, 13, A0, A1, A2, A3}; // 7セグメントのピン
// 周波数の配列 (スイッチに対応する音)
const int frequencies[] = {440, 554, 659, 784}; // A4, C#5, E5, G5
// 数字に対応する7セグメントのパターン (0-4を表示するため)
const byte digitPatterns[5][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
};
void setup() {
// 入力ピンの設定
for (int i = 0; i < 4; i++) {
pinMode(switchPins[i], INPUT);
pinMode(ledPins[i], OUTPUT);
}
pinMode(buzzerPin, OUTPUT);
// 7セグメントディスプレイのピンの設定
for (int i = 0; i < 7; i++) {
pinMode(segPins[i], OUTPUT);
}
}
void loop() {
for (int i = 0; i < 4; i++) {
if (digitalRead(switchPins[i]) == HIGH) {
// スイッチが押されたとき
digitalWrite(ledPins[i], HIGH); // 対応するLEDを点灯
tone(buzzerPin, frequencies[i]); // ブザーで音を鳴らす
// 7セグメントディスプレイにスイッチ番号を表示
displayDigit(i + 1);
} else {
digitalWrite(ledPins[i], LOW); // 対応するLEDを消灯
}
}
noTone(buzzerPin); // スイッチが押されていないときはブザーを止める
}
// 7セグメントディスプレイに数字を表示する関数
void displayDigit(int digit) {
for (int i = 0; i < 7; i++) {
digitalWrite(segPins[i], digitPatterns[digit][i]);
}
}
受信機
#include <LoRa.h>
#include <I2S.h>
// I2Sピン設定
#define I2S_DOUT 19 // I2Sのデータ出力ピン(DIN)
#define I2S_BCLK 20 // I2Sのビットクロックピン(BCLK)
#define I2S_LRCK 21 // I2Sの左右クロックピン(LRCK)
void setup() {
// シリアル通信の開始
Serial.begin(115200);
while (!Serial);
Serial.println("Starting LoRa Receiver");
// LoRaの初期化(周波数915MHz)
if (!LoRa.begin(915E6)) {
Serial.println("Failed to initialize LoRa");
while (1);
}
Serial.println("LoRa Initialized");
// I2Sの初期化(標準の設定: I2S_PHILIPS_MODE, サンプリング周波数: 44100Hz, ビット数: 16)
if (!I2S.begin(I2S_PHILIPS_MODE, 44100, 16)) {
Serial.println("Failed to initialize I2S!");
while (1);
}
Serial.println("I2S Initialized");
}
void loop() {
// LoRaパケットの受信を確認
int packetSize = LoRa.parsePacket();
if (packetSize) {
String deviceId = "";
String signalStatus = "";
// デバイスIDと信号を受信
while (LoRa.available()) {
String msg = LoRa.readString();
int separatorIndex = msg.indexOf(',');
if (separatorIndex != -1) {
deviceId = msg.substring(0, separatorIndex);
signalStatus = msg.substring(separatorIndex + 1);
}
}
// 受信したデータの表示
Serial.print("Device ID: ");
Serial.println(deviceId);
Serial.print("Signal Status: ");
Serial.println(signalStatus);
// ON信号が来た場合、音を鳴らす処理
if (signalStatus.equals("ON")) {
Serial.println("Sound ON");
// 音データを送信(例: 簡単なサイン波を生成して送信)
for (int i = 0; i < 1000; i++) {
int16_t sample = (int16_t)(sin(i * 2.0 * PI / 100.0) * 32767);
I2S.write((uint8_t*)&sample, sizeof(sample));
}
} else {
Serial.println("Sound OFF");
}
}
}
2個目
#include <RadioLib.h>
#include <I2S.h>
// Initialize the SX1262 LoRa module without specifying pins if they are predefined
SX1262 lora;
// I2S pin configuration
#define I2S_DOUT 19 // I2S Data Out (DIN)
#define I2S_BCLK 20 // I2S Bit Clock (BCLK)
#define I2S_LRCK 21 // I2S Left-Right Clock (LRCK)
void setup() {
// Start Serial communication
Serial.begin(115200);
while (!Serial);
Serial.println("Starting LoRa Receiver");
// Initialize LoRa with SX1262 module
int state = lora.begin();
if (state != RADIOLIB_ERR_NONE) {
Serial.print("LoRa initialization failed, code: ");
Serial.println(state);
while (true);
}
Serial.println("LoRa Initialized");
// Initialize I2S (Standard mode: I2S_PHILIPS_MODE, Sampling: 44100Hz, Bit depth: 16)
if (!I2S.begin(I2S_PHILIPS_MODE, 44100, 16)) {
Serial.println("Failed to initialize I2S!");
while (true);
}
Serial.println("I2S Initialized");
}
void loop() {
// Buffer for received LoRa message
String receivedMessage;
// Receive LoRa message
int state = lora.receive(receivedMessage);
if (state == RADIOLIB_ERR_NONE) {
String deviceId = "";
String signalStatus = "";
// Parse the message (assumes "DeviceID,Status" format)
int separatorIndex = receivedMessage.indexOf(',');
if (separatorIndex != -1) {
deviceId = receivedMessage.substring(0, separatorIndex);
signalStatus = receivedMessage.substring(separatorIndex + 1);
}
// Display received data
Serial.print("Device ID: ");
Serial.println(deviceId);
Serial.print("Signal Status: ");
Serial.println(signalStatus);
// Play sound if signal is "ON"
if (signalStatus.equals("ON")) {
Serial.println("Sound ON");
// Generate a simple sine wave tone
for (int i = 0; i < 1000; i++) {
int16_t sample = (int16_t)(sin(i * 2.0 * PI / 100.0) * 32767);
I2S.write((uint8_t*)&sample, sizeof(sample));
}
} else {
Serial.println("Sound OFF");
}
} else {
Serial.print("Receive failed, code: ");
Serial.println(state);
}
}
#include <RadioLib.h>
SX1262 lora;
void setup() {
Serial.begin(115200);
// LoRaモジュールの初期化(ピンの指定を省略)
int state = lora.begin();
if (state != RADIOLIB_ERR_NONE) {
Serial.print("LoRaの初期化に失敗しました。エラーコード: ");
Serial.println(state);
while (true);
}
Serial.println("LoRa Initialized");
}
void loop() {
// ループ内のコード
}
次
送信機
#include <LoRa.h>
// スイッチが接続されるピン
#define SWITCH_PIN 15
// 各送信機のユニークなIDを設定
String deviceID = "Device123"; // ここを各デバイスごとに異なるIDに変更
void setup() {
Serial.begin(115200);
while (!Serial);
Serial.println("Starting LoRa Sender");
// LoRaの初期化(周波数915MHz)
if (!LoRa.begin(915E6)) {
Serial.println("Failed to initialize LoRa");
while (1);
}
Serial.println("LoRa Initialized");
// スイッチピンを入力モードに設定(プルアップ)
pinMode(SWITCH_PIN, INPUT_PULLUP);
}
void loop() {
// スイッチの状態を読み取る(ONの場合はLOW)
int switchState = digitalRead(SWITCH_PIN);
// スイッチがONのとき(通電時)
if (switchState == LOW) {
sendLoRaMessage(deviceID + ",ON");
Serial.println("Sent: " + deviceID + ",ON");
}
// スイッチがOFFのとき(非通電時)
else {
sendLoRaMessage(deviceID + ",OFF");
Serial.println("Sent: " + deviceID + ",OFF");
}
// 送信間隔を設定(例:1秒)
delay(1000);
}
// メッセージをLoRaで送信する関数
void sendLoRaMessage(String message) {
LoRa.beginPacket();
LoRa.print(message);
LoRa.endPacket();
}
}
#include <RadioLib.h> // RadioLibライブラリをインクルード
// SX1262 LoRaモジュールを初期化(ピンは内部で設定されていると仮定)
SX1262 lora;
// デバイスIDを定義(各デバイスの識別に使用)
String deviceID = "Device123"; // 必要に応じて変更
void setup() {
Serial.begin(115200); // シリアル通信を115200bpsで開始
// LoRaモジュールの初期化
if (lora.begin() != RADIOLIB_ERR_NONE) {
Serial.println("LoRa init failed!"); // 初期化に失敗した場合のエラーメッセージ
while (true); // 無限ループで停止
}
Serial.println("LoRa Initialized"); // 初期化成功メッセージ
// スイッチ入力ピンの設定(プルアップ抵抗を使用)
pinMode(15, INPUT_PULLUP); // ピン15を入力として設定
}
void loop() {
// スイッチの状態を読み取り
int switchState = digitalRead(15); // スイッチの状態を取得
String message = deviceID + "," + (switchState == LOW ? "ON" : "OFF"); // メッセージを生成
// メッセージの送信
int state = lora.transmit(message); // LoRaを介してメッセージを送信
if (state == RADIOLIB_ERR_NONE) {
Serial.println("Sent: " + message); // 送信成功メッセージ
} else {
Serial.print("Failed to send, error code: "); // 送信失敗メッセージ
Serial.println(state); // エラーコードを表示
}
delay(1000); // 1秒ごとに送信(必要に応じて調整)
}
#include <LoRa.h>
void setup() {
Serial.begin(115200);
while (!Serial);
// LoRaの初期化
if (!LoRa.begin(915E6)) { // 使用する周波数を設定
Serial.println("LoRa init failed!");
while (1);
}
Serial.println("LoRa Initialized");
}
void loop() {
// 受信データがあるか確認
int packetSize = LoRa.parsePacket();
if (packetSize) {
String receivedMessage = "";
while (LoRa.available()) {
receivedMessage += (char)LoRa.read();
}
Serial.print("Received message: ");
Serial.println(receivedMessage);
// ON/OFFの表示
if (receivedMessage.equals("ON")) {
Serial.println("State: ON");
} else if (receivedMessage.equals("OFF")) {
Serial.println("State: OFF");
}
}
}