BASIC4MCU | 질문게시판 | Arduino nano 33 iot 모듈 블루투스 통신
페이지 정보
작성자 senior 작성일2023-08-16 11:57 조회633회 댓글5건본문
Arduino nano 33 iot 모듈 2개를 가지고 Master - Slave 로 블루투스 통신을 하려고합니다.
1개의 마스터와 여러대의 Slave를 가지고 자이로 센서값이나 다양한 값을 보낼려고합니다.
이때 Master의 코드는
#include <ArduinoBLE.h>
#include <Arduino_LSM6DS3.h>BLEService sensorService("66df5109-edde-4f8a-a5e1-02e02a69cbd5");BLEStringCharacteristic xSensorLevel("741c12b9-e13c-4992-8a5e-fce46dec0bff", BLERead | BLENotify,15);BLEStringCharacteristic ySensorLevel("baad41b2-f12e-4322-9ba6-22cd9ce09832", BLERead | BLENotify,15);BLEStringCharacteristic zSensorLevel("5748a25d-1834-4c68-a49b-81bf3aeb2e50", BLERead | BLENotify,15);// last sensor datafloat oldXLevel = 0;float oldYLevel = 0;float oldZLevel = 0;long previousMillis = 0;void setup() {Serial.begin(115200);while (!Serial);if (!IMU.begin()) {Serial.println("Failed to initialize IMU!");while (1);}pinMode(LED_BUILTIN, OUTPUT);if (!BLE.begin()) {Serial.println("starting BLE failed!");while (1);}BLE.setLocalName("Gyroscope");BLE.setAdvertisedService(sensorService);sensorService.addCharacteristic(xSensorLevel);sensorService.addCharacteristic(ySensorLevel);sensorService.addCharacteristic(zSensorLevel);BLE.addService(sensorService);xSensorLevel.writeValue(String(0));ySensorLevel.writeValue(String(0));zSensorLevel.writeValue(String(0));BLE.advertise();Serial.println("Bluetooth device active, waiting for connections...");}void loop() {BLEDevice central = BLE.central();if (central) {Serial.print("Connected to central: ");Serial.println(central.address());digitalWrite(LED_BUILTIN, HIGH);while (central.connected()) {//long currentMillis = millis();updateGyroscopeLevel();delay(300);}digitalWrite(LED_BUILTIN, LOW);Serial.print("Disconnected from central: ");Serial.println(central.address());}}void updateGyroscopeLevel() {float x, y, z;if (IMU.gyroscopeAvailable()) {IMU.readGyroscope(x, y, z);if (x != oldXLevel) {xSensorLevel.writeValue(String(x));oldXLevel = x;}if (y != oldYLevel) {ySensorLevel.writeValue(String(y));oldYLevel = y;}if (z != oldZLevel) {zSensorLevel.writeValue(String(z));oldZLevel = z;}Serial.print(x);Serial.print('\t');Serial.print(y);Serial.print('\t');Serial.println(z);}}
위와 같고 slave의 코드는 아래와 같습니다.
#include <ArduinoBLE.h>BLEService gyroService("66df5109-edde-4f8a-a5e1-02e02a69cbd5");BLEStringCharacteristic xSensorLevel("741c12b9-e13c-4992-8a5e-fce46dec0bff", BLERead | BLENotify, 15);BLEStringCharacteristic ySensorLevel("baad41b2-f12e-4322-9ba6-22cd9ce09832", BLERead | BLENotify, 15);BLEStringCharacteristic zSensorLevel("5748a25d-1834-4c68-a49b-81bf3aeb2e50", BLERead | BLENotify, 15);void setup() {Serial.begin(115200);if (!BLE.begin()) {Serial.println("Failed to initialize BLE!");while (1);}BLE.setLocalName("GyroReceiver");BLE.setAdvertisedService(gyroService);gyroService.addCharacteristic(xSensorLevel);gyroService.addCharacteristic(ySensorLevel);gyroService.addCharacteristic(zSensorLevel);BLE.addService(gyroService);BLE.advertise();}void loop() {BLEDevice central = BLE.central();if (central) {Serial.println("Connected to central device");// Check if the connected device's MAC address matches the targetif (central.address() == "30:c6:f7:01:dd:46") {while (central.connected()) {// Check for value updates for the characteristicsif (xSensorLevel.valueUpdated()) {String xValue = xSensorLevel.value();Serial.println("X Sensor Level: " + xValue);}if (ySensorLevel.valueUpdated()) {String yValue = ySensorLevel.value();Serial.println("Y Sensor Level: " + yValue);}if (zSensorLevel.valueUpdated()) {String zValue = zSensorLevel.value();Serial.println("Z Sensor Level: " + zValue);}}Serial.println("Connection lost");}}}
하지만 MAC주소도 확인해서 맞고, 휴대폰으로 연결했을때에는 잘 연결이 됩니다. 자이로센서값도 잘 출력됩니다.
하지만 Slave모듈의 시리얼 모니터에서 띄우고싶은데 연결이 되지 않습니다.
무엇이 잘못된거일까요?? 둘다 코드 실행시 블루투스 모듈이 정상작동중이고, 연결을 기다리고 있다고합니다..
댓글 5
조회수 633master님의 댓글
master 작성일
슬레이브가 여러개라고 했는데요
슬레이브에 BLE가 각각 1개씩 꼽혀있나요?
코드로는 이해가 잘 안됩니다.
슬레이브는 왜 3개가 필요하죠?
senior님의 댓글
senior
현재로는 마스터1개 슬레이브1개 총 2개로 시도중이고 슬레이브는 x,y,z값으로 슬레이브가 3개로 하려는건 아닙니다
master님의 댓글
master
https://remnant24c.tistory.com/271
이 예제로 테스트 중인가요?
잘 안되면 다른 예제를 찾아보세요
senior님의 댓글
senior
이 예제의 도움을 받아 하였지만, 이 예제의 경우 nRF 어플리케이션으로 값을 수신하는것이라, 제가 시도하고 있는 모듈 - 모듈 통신이 아니라서 도움을 받지 못하고있습니다ㅠㅠ
master님의 댓글
master
사용하는 모듈은 일대일 통신 예제가 없나요?
자이로센서를 사용하면 더 좋고 없으면 GPS센서도 괜찮습니다.