NRF52832 и датчик BME280

О программировании Arduino, использование библиотек, примеры и общие вопросы программирования.
serghei
Сообщения: 53
Зарегистрирован: 05 апр 2018, 09:12
Откуда: Молдова

NRF52832 и датчик BME280

Сообщение serghei »

Обновление скетча
Данная нода разработана на основе скетча Berk для e-paper. Как программировать сам чип изложено тут. Я только заменил обращение к датчику BME280 на I2C. Получилось так
MySensors_BME280_work.zip
(6.01 КБ) 1461 скачивание
Среда разработки IDE 1.8.5
52832_BME280.jpg
52832_BME280.jpg (124.71 КБ) 32643 просмотра
В МД выглядит так
MD.jpg
MD.jpg (127.43 КБ) 32643 просмотра
PS/ Прошу прощения. Библиотека BME280
BME280.zip
(37.7 КБ) 1475 скачиваний
Последний раз редактировалось serghei 27 май 2020, 17:54, всего редактировалось 5 раз.
MySensors Гетвей на ESP8266 с веб интерфейсом + много нод на NRF52832
Andrey_64
Сообщения: 10
Зарегистрирован: 06 дек 2018, 18:24

Re: NRF52832 и датчик BME280

Сообщение Andrey_64 »

Респект первопроходцам !
Круть!
Залил этот код в такое:
http://www.kosmodrom.com.ua/el.php?name=NRF52832Modul

на таком :
http://www.kosmodrom.com.ua/prodlist.ph ... %20Adapter
Вложения
NRF52832Modul.jpg
NRF52832Modul.jpg (60.37 КБ) 32325 просмотров
NRF52832Adapter.jpg
NRF52832Adapter.jpg (57.08 КБ) 32325 просмотров
Andrey_64
Сообщения: 10
Зарегистрирован: 06 дек 2018, 18:24

Re: NRF52832 и датчик BME280

Сообщение Andrey_64 »

Залил этот код на платку


С пол-тыка
Проблемка: при пропадании питания вваливается в вечный ребут. Посоветуйте, кто знает почему!!!
Вложения
NRF52832Modul.jpg
NRF52832Modul.jpg (60.37 КБ) 32440 просмотров
NRF52832Adapter.jpg
NRF52832Adapter.jpg (57.08 КБ) 32440 просмотров
Berk
Сообщения: 81
Зарегистрирован: 11 окт 2017, 22:05

Re: NRF52832 и датчик BME280

Сообщение Berk »

дебаг из сериала покажите - (работает, отправка пары интервалов, передергиваем питание...)
Berk
Сообщения: 81
Зарегистрирован: 11 окт 2017, 22:05

Re: NRF52832 и датчик BME280

Сообщение Berk »

..и питание от чего? в момент регистрации ноды большое потребление идет, если батарейка то может быть просадка и ребут
Andrey_64
Сообщения: 10
Зарегистрирован: 06 дек 2018, 18:24

Re: NRF52832 и датчик BME280

Сообщение Andrey_64 »

После пропадания питания

| | | | |_| |___| | __/ | | \__ \ _ | | \__ \
|_| |_|\__, |____/ \___|_| |_|___/\___/|_| |___/
|___/ 2.2.0

23 MCO:BGN:INIT NODE,CP=RNNNN---,VER=2.2.0
27 MCO:BGN:BFR
2
__ __ ____
| \/ |_ _/ ___| ___ _ __ ___ ___ _ __ ___
| |\/| | | | \___ \ / _ \ `_ \/ __|/ _ \| `__/ __|
| | | | |_| |___| | __/ | | \__ \ _ | | \__ \
|_| |_|\__, |____/ \___|_| |_|___/\___/|_| |___/
|___/ 2.2.0

0 MCO:BGN:INIT NODE,CP=RNNNN---,VER=2.2.0
0 MCO:BGN:BFR
0
__ __ ____
| \/ |_ _/ ___| ___ _ __ ___ ___ _ __ ___
| |\/| | | | \___ \ / _ \ `_ \/ __|/ _ \| `__/ __|
| | | | |_| |___| | __/ | | \__ \ _ | | \__ \
|_| |_|\__, |____/ \___|_| |_|___/\___/|_| |___/
|___/ 2.2.0

0 MCO:BGN:INIT NODE,CP=RNNNN---,VER=2.2.0
0 MCO:BGN:BFR
0
__ __ ____


Ребут не помагает. Питал и от ST-Link , Аккум 2х3,6 в в параллель, имп. стаб. на 3А
Это норм режим после перезаливки

| \/ |_ _/ ___| ___ _ __ ___ ___ _ __ ___
| |\/| | | | \___ \ / _ \ `_ \/ __|/ _ \| `__/ __|
| | | | |_| |___| | __/ | | \__ \ _ | | \__ \
|_| |_|\__, |____/ \___|_| |_|___/\___/|_| |___/
|___/ 2.2.0

0 MCO:BGN:INIT NODE,CP=RNNNN---,VER=2.2.0
0 MCO:BGN:BFR
0
__ __ ____
| \/ |_ _/ ___| ___ _ 435 TSM:INIT
436 TSF:WUR:MS=0
437 TSM:INIT:TSP OK
439 TSM:INIT:STATID=60
441 TSF:SID:OK,ID=60
443 TSM:FPAR
450 TSF:MSG:SEND,60-60-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
960 TSF:MSG:READ,0-0-60,s=255,c=3,t=8,pt=1,l=1,sg=0:0
965 TSF:MSG:FPAR OK,ID=0,D=1
1514 TSF:MSG:READ,3-3-60,s=255,c=3,t=8,pt=1,l=1,sg=0:1
2457 TSM:FPAR:OK
2458 TSM:ID
2459 TSM:ID:OK
2460 TSM:UPL
2463 TSF:MSG:SEND,60-60-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=0,st=OK:1
2477 TSF:MSG:READ,0-0-60,s=255,c=3,t=25,pt=1,l=1,sg=0:1
2482 TSF:MSG:PONG RECV,HP=1
2485 TSM:UPL:OK
2486 TSM:READY:ID=60,PAR=0,DIS=1
2490 TSF:MSG:SEND,60-60-0-0,s=255,c=3,t=15,pt=6,l=2,sg=0,ft=0,st=OK:0100
2497 TSF:MSG:READ,0-0-60,s=255,c=3,t=15,pt=6,l=2,sg=0:0100
2504 TSF:MSG:SEND,60-60-0-0,s=255,c=0,t=17,pt=0,l=5,sg=0,ft=0,st=OK:2.2.0
2511 TSF:MSG:SEND,60-60-0-0,s=255,c=3,t=6,pt=1,l=1,sg=0,ft=0,st=OK:0
2661 TSF:MSG:READ,0-0-60,s=255,c=3,t=6,pt=0,l=1,sg=0:M
2667 TSF:MSG:SEND,60-60-0-0,s=255,c=3,t=11,pt=0,l=14,sg=0,ft=0,st=OK:BME_280 Sensor
2676 TSF:MSG:SEND,60-60-0-0,s=255,c=3,t=12,pt=0,l=4,sg=0,ft=0,st=OK:1.52
2784 TSF:MSG:SEND,60-60-0-0,s=0,c=0,t=6,pt=0,l=18,sg=0,ft=0,st=OK:Temperature sensor
2893 TSF:MSG:SEND,60-60-0-0,s=1,c=0,t=7,pt=0,l=15,sg=0,ft=0,st=OK:Humidity sensor
3002 TSF:MSG:SEND,60-60-0-0,s=2,c=0,t=8,pt=0,l=15,sg=0,ft=0,st=OK:Pressure sensor
3110 TSF:MSG:SEND,60-60-0-0,s=100,c=0,t=23,pt=0,l=11,sg=0,ft=0,st=OK:Batt sensor
3117 MCO:REG:REQ
3120 TSF:MSG:SEND,60-60-0-0,s=255,c=3,t=26,pt=1,l=1,sg=0,ft=0,st=OK:2
3131 TSF:MSG:READ,0-0-60,s=255,c=3,t=27,pt=1,l=1,sg=0:1
3136 MCO:PIM:NODE REG=1
3139 MCO:BGN:STP
3447 TSF:MSG:SEND,60-60-0-0,s=100,c=1,t=24,pt=3,l=2,sg=0,ft=0,st=OK:71
3456 TSF:MSG:SEND,60-60-0-0,s=255,c=3,t=0,pt=1,l=1,sg=0,ft=0,st=OK:0
3463 MyS: SEND BATTERY LEVEL
3465 MyS: BATTERY LEVEL ADC: 71
3468 MCO:BGN:INIT OK,TSP=1
3473 TSF:MSG:SEND,60-60-0-0,s=1,c=1,t=1,pt=7,l=5,sg=0,ft=0,st=OK:50.3
3483 TSF:MSG:SEND,60-60-0-0,s=2,c=1,t=4,pt=7,l=5,sg=0,ft=0,st=OK:753.2
3493 TSF:MSG:SEND,60-60-0-0,s=0,c=1,t=0,pt=7,l=5,sg=0,ft=0,st=OK:22.0
3499 MCO:SLP:MS=600000,SMS=0,I1=255,M1=255,I2=255,M2=255
3504 TSF:TDI:TPD
Berk
Сообщения: 81
Зарегистрирован: 11 окт 2017, 22:05

Re: NRF52832 и датчик BME280

Сообщение Berk »

попробуйте сделайть:
1/загрузите скетч мас ерайз,запустите
76.png
76.png (94.52 КБ) 32418 просмотров
2/Сделайте - загрузить бутлоадер
77.png
77.png (106 КБ) 32418 просмотров
3/загрузите ваш скетч и проверьте
Berk
Сообщения: 81
Зарегистрирован: 11 окт 2017, 22:05

Re: NRF52832 и датчик BME280

Сообщение Berk »

или еще вариант, я убрал бефор, переключение в режим пониженного потребления убрал в сетап, может в этом дело, попробуйте этот переделанный скетч:

Код: Выделить всё

// Enable debug prints to serial monitor
#define MY_DEBUG

// Enable and select radio type attached

#define MY_RADIO_NRF5_ESB
//#define MY_PASSIVE_NODE
#define MY_NODE_ID 60
//#define MY_PARENT_NODE_ID AUTO
#define CHILD_ID_TEMP 0
#define CHILD_ID_HUM 1
#define CHILD_ID_PRESSURE 2
#define POWER_CHILD_ID 100
#define BAT_COOF 5.95

//#define BAT_COOF 2.95    //????

//#define BAT_MIN 250
//#define BAT_MAX 300

#define BAT_MIN 360
#define BAT_MAX 600

unsigned long SLEEP_TIME = 600000; // 10 минут

bool change;
uint16_t temp1;
float vcc;
int battery;
int old_battery;

uint32_t send_batteryTime = 7200000;
//uint32_t send_batteryTime = 7200;
unsigned long w_battetyTime = 0;
bool chek_h = true;
boolean first_send_battery = 1;

//#include <SPI.h>
#include <MySensors.h>
#include <Wire.h>

#include <BME280I2C.h>
// датчик температуры, давления и влажности
BME280I2C bme;

float temp(NAN), hum(NAN), pres(NAN);


MyMessage msgHum(CHILD_ID_HUM, V_HUM);
MyMessage msgPress(CHILD_ID_PRESSURE, V_PRESSURE);
MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
MyMessage powerMsg(POWER_CHILD_ID, V_VAR1);


void presentation() {
  // Send the sketch version information to the gateway and Controller
  sendSketchInfo("BME_280 Sensor", "1.52");
  wait(100);
  // Register binary input sensor to sensor_node (they will be created as child devices)
  // You can use S_DOOR, S_MOTION or S_LIGHT here depending on your usage.
  // If S_LIGHT is used, remember to update variable type you send in. See "msg" above.
  present(CHILD_ID_TEMP, S_TEMP, "Temperature sensor");
  wait(100);
  present(CHILD_ID_HUM, S_HUM, "Humidity sensor");
  wait(100);
  present(CHILD_ID_PRESSURE, S_BARO, "Pressure sensor");
}
void setup()
{
  NRF_POWER->DCDCEN = 1;
  disableNfc();
  turnOffAdc();
  bme.begin();
  readBatLev();

}
void loop()
{

  bme.read(pres, temp, hum, true, B101);
  // generate some random data
  send(msgHum.set(hum, 1));

  send(msgPress.set(pres, 1));

  send(msgTemp.set(temp , 1));

  sleep(SLEEP_TIME);
  sleep(1000);

}

void readBatLev() {
  NRF5_ESB_startListening();
  wait(300);
  temp1 = analogRead(29);
  //vcc = temp * 3.0 / 1024 * BAT_COOF * 100;
  vcc = temp1 * 0.018 * 100;
  battery = map((int)vcc, BAT_MIN, BAT_MAX, 0, 100);
  if (battery < 0) {
    battery = 0;
  }
  if (battery > 100) {
    battery = 100;
  }
  if (first_send_battery == 1) {
    first_send_battery = 0;
    send(powerMsg.set(temp1));
    sendBatteryLevel(battery);
    TRANSPORT_DEBUG(PSTR("MyS: SEND BATTERY LEVEL\n"));
    TRANSPORT_DEBUG(PSTR("MyS: BATTERY LEVEL ADC: %d\n"), temp1);
    old_battery = battery;
  } else {
    if (old_battery != battery) {
      if (battery < old_battery) {
        old_battery = battery;
        sendBatteryLevel(battery);
        TRANSPORT_DEBUG(PSTR("MyS: SEND BATTERY LEVEL\n"));
        TRANSPORT_DEBUG(PSTR("MyS: BATTERY LEVEL ADC: %d\n"), temp1);
        change = 1;
      } else {
        battery = old_battery;
      }
    }
  }
}
void disableNfc() {  //only applied to nRF52
  //Make pins 9 and 10 usable as GPIO pins.
  NRF_NFCT->TASKS_DISABLE = 1; //disable NFC
  NRF_NVMC->CONFIG = 1; // Write enable the UICR
  NRF_UICR->NFCPINS = 0; //Make pins 9 and 10 usable as GPIO pins.
  NRF_NVMC->CONFIG = 0; // Put the UICR back into read-only mode.
}

void turnOffRadio() {
  NRF_RADIO->TASKS_DISABLE = 1;
  while (!(NRF_RADIO->EVENTS_DISABLED)) {}  //until radio is confirmed disabled
}

void turnOffAdc() {
  if (NRF_SAADC->ENABLE) { //if enabled, then disable the SAADC
    NRF_SAADC->TASKS_STOP = 1;
    while (NRF_SAADC->EVENTS_STOPPED) {} //wait until stopping of SAADC is confirmed
    NRF_SAADC->ENABLE = 0; //disable the SAADC
    while (NRF_SAADC->ENABLE) {} //wait until the disable is confirmed
  }
}

void turnOffHighFrequencyClock() {
  NRF_CLOCK->TASKS_HFCLKSTOP = 1;
  while ((NRF_CLOCK->HFCLKSTAT) & 0x0100) {}  //wait as long as HF clock is still running.
}

void mySleepPrepare() {  //turn-off energy drains prior to sleep
  turnOffHighFrequencyClock();
  turnOffRadio();
  NRF_UART0->ENABLE = 0;
}
Andrey_64
Сообщения: 10
Зарегистрирован: 06 дек 2018, 18:24

Re: NRF52832 и датчик BME280

Сообщение Andrey_64 »

СПАСИБО !
1 Очистил... ОК
2 Загрузчик не лег:
Open On-Chip Debugger 0.10.0-dev-00254-g696fc0a (2016-04-10-10:13)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
debug_level: 0
Ошибка при записи загрузчика.
0x4000
adapter speed: 10000 kHz
Error: init mode failed (unable to connect to the target)
in procedure 'init'
in procedure 'ocd_bouncer'

3 При пропадания питания поднимается ,но , после первого засыпания не просыпается

2750 MCO:BGN:STP
>
__ __ ____
| \/ |_ _/ ___| ___ _ __ ___ ___ _ __ ___
| |\/| | | | \___ \ / _ \ `_ \/ __|/ _ \| `__/ __|
| | | | |_| |___| | __/ | | \__ \ _ | | \__ \
|_| |_|\__, |____/ \___|_| |_|___/\___/|_| |___/
|___/ 2.2.0

23 MCO:BGN:INIT NODE,CP=RNNNN---,VER=2.2.0
27 TSM:INIT
28 TSF:WUR:MS=0
30 TSM:INIT:TSP OK
31 TSM:INIT:STATID=60
33 TSF:SID:OK,ID=60
35 TSM:FPAR
43 TSF:MSG:SEND,60-60-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
2050 !TSM:FPAR:NO REPLY
2052 TSM:FPAR
2059 TSF:MSG:SEND,60-60-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
2625 TSF:MSG:READ,0-0-60,s=255,c=3,t=8,pt=1,l=1,sg=0:0
2630 TSF:MSG:FPAR OK,ID=0,D=1
2740 TSF:MSG:READ,3-3-60,s=255,c=3,t=8,pt=1,l=1,sg=0:1
4066 TSM:FPAR:OK
4067 TSM:ID
4068 TSM:ID:OK
4069 TSM:UPL
4072 TSF:MSG:SEND,60-60-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=0,st=OK:1
4086 TSF:MSG:READ,0-0-60,s=255,c=3,t=25,pt=1,l=1,sg=0:1
4091 TSF:MSG:PONG RECV,HP=1
4094 TSM:UPL:OK
4095 TSM:READY:ID=60,PAR=0,DIS=1
4099 TSF:MSG:SEND,60-60-0-0,s=255,c=3,t=15,pt=6,l=2,sg=0,ft=0,st=OK:0100
4106 TSF:MSG:READ,0-0-60,s=255,c=3,t=15,pt=6,l=2,sg=0:0100
4113 TSF:MSG:SEND,60-60-0-0,s=255,c=0,t=17,pt=0,l=5,sg=0,ft=0,st=OK:2.2.0
4120 TSF:MSG:SEND,60-60-0-0,s=255,c=3,t=6,pt=1,l=1,sg=0,ft=0,st=OK:0
4255 TSF:MSG:READ,0-0-60,s=255,c=3,t=6,pt=0,l=1,sg=0:M
4261 TSF:MSG:SEND,60-60-0-0,s=255,c=3,t=11,pt=0,l=14,sg=0,ft=0,st=OK:BME_280 Sensor
4270 TSF:MSG:SEND,60-60-0-0,s=255,c=3,t=12,pt=0,l=4,sg=0,ft=0,st=OK:1.52
4368 TSF:MSG:READ,0-0-60,s=255,c=3,t=6,pt=0,l=1,sg=0:M
4378 TSF:MSG:SEND,60-60-0-0,s=0,c=0,t=6,pt=0,l=18,sg=0,ft=0,st=OK:Temperature sensor
4487 TSF:MSG:SEND,60-60-0-0,s=1,c=0,t=7,pt=0,l=15,sg=0,ft=0,st=OK:Humidity sensor
4595 TSF:MSG:SEND,60-60-0-0,s=2,c=0,t=8,pt=0,l=15,sg=0,ft=0,st=OK:Pressure sensor
4602 MCO:REG:REQ
4605 TSF:MSG:SEND,60-60-0-0,s=255,c=3,t=26,pt=1,l=1,sg=0,ft=0,st=OK:2
4617 TSF:MSG:READ,0-0-60,s=255,c=3,t=27,pt=1,l=1,sg=0:1
4622 MCO:PIM:NODE REG=1
4624 MCO:BGN:STP
Andrey_64
Сообщения: 10
Зарегистрирован: 06 дек 2018, 18:24

Re: NRF52832 и датчик BME280

Сообщение Andrey_64 »

Очистил
Загрузчик не ложится
Пробовал код теперь не просыпается ...
Не мешало-бы добавить какой-то индикатор в передаче , что сенсор жив (для МД)
Ответить