@MiKa Here is my sketch if it helps (MySensors v2.2.0-Beta). It uses ALS, BMP180 and RGB leds.
Working well with my nRF24 LNA+PA GW.
#include <Arduino.h>
#define MY_DEBUG
#define MY_BAUD_RATE 9600
// Mode Radio / Enable and select radio type attached
#define MY_RADIO_NRF5_ESB
#define MY_NRF5_ESB_PA_LEVEL NRF5_PA_MAX
#define MY_NODE_ID 6
#include "MySensors.h"
#include <Wire.h>
#include <Adafruit_BMP085.h>
Adafruit_BMP085 bmp = Adafruit_BMP085();
#define CHILD_ID_TEMP 0
#define CHILD_ID_BARO 1
#define CHILD_ID_ALS 2
#define SLEEP_NODE true // True to activate Sleep Mode, but currently unsupported on esp8266
unsigned long SLEEP_TIME = 120 * 1000; // Sleep time between reads (in milliseconds)
#define RED_PIN 17
#define GREEN_PIN 18
#define BLUE_PIN 19
#define COLOR_OFF 0
#define COLOR_RED 1
#define COLOR_GREEN 2
#define COLOR_BLUE 4
MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
MyMessage msgBaro(CHILD_ID_BARO, V_PRESSURE);
MyMessage msgForecast(CHILD_ID_BARO, V_FORECAST);
MyMessage msgALS(CHILD_ID_ALS, V_LIGHT_LEVEL);
void setColor (uint8_t c) {
digitalWrite (RED_PIN, !(c & COLOR_RED));
digitalWrite (GREEN_PIN, !(c & COLOR_GREEN));
digitalWrite (BLUE_PIN, !(c & COLOR_BLUE));
}
void setup() {
setColor (COLOR_RED);
setColor (COLOR_GREEN);
setColor (COLOR_BLUE);
Wire.begin();
pinMode (RED_PIN, OUTPUT);
pinMode (GREEN_PIN, OUTPUT);
pinMode (BLUE_PIN, OUTPUT);
setColor (COLOR_RED);
delay(250);
setColor (COLOR_GREEN);
delay(250);
setColor (COLOR_BLUE);
delay(250);
setColor (COLOR_OFF);
/* BMP180. */
if (!bmp.begin()) {
Serial.println("Could not find a valid BMP085 sensor, check wiring!");
setColor (COLOR_RED);
while (1);
}
}
void presentation() {
sendSketchInfo("nrf Sensor TAG", "1.0.0");
// Sensor presentation to the GW
present(CHILD_ID_TEMP, S_TEMP);
present(CHILD_ID_BARO, S_BARO);
present(CHILD_ID_ALS, S_LIGHT_LEVEL);
}
void AP3216_write(uint8_t regAddress, uint8_t value) {
Wire.beginTransmission(0x1E); // I2C Address of AP3216 sensor is 0x1E
Wire.write(regAddress);
Wire.write(value);
Wire.endTransmission();
}
uint8_t AP3216_read(uint8_t regAddress) {
Wire.beginTransmission(0x1E); // I2C Address of AP3216 sensor is 0x1E
Wire.write(regAddress);
Wire.endTransmission();
Wire.requestFrom(0x1E, 1, true);
return Wire.read() & 0xFF;
}
uint16_t readALS (void)
{
/* System mode: ALS function once */
AP3216_write (0x0, 0x5);
delay (250);
return ((uint16_t) AP3216_read (0xC) << 8) | AP3216_read (0xD);
}
void loop() {
send(msgTemp.set(bmp.readTemperature(), 1));
send(msgBaro.set(bmp.readPressure(), 1));
send(msgForecast.set(bmp.readSealevelPressure(834.0), 1)); /* Change altitude here ! */
send(msgALS.set(readALS(), 1));
setColor (COLOR_BLUE);
delay (250);
setColor (COLOR_OFF);
if (SLEEP_NODE)
sleep(SLEEP_TIME);
else
delay (SLEEP_TIME);
}
You also need to change SDA/SCL pins by creating a new board from the Generic nRF51 (or modifying it)
In variant.h:
#define PIN_WIRE_SDA (9u)
#define PIN_WIRE_SCL (10u)