nRF5 Multi Sensor Board (12-14€)


  • Contest Winner

    51822_ITC_PolyU_HK

    The "ITC PolyU HK" is one of the most interesting nRF5 Boards I have found. This board is useable with the upcoming MySensors 2.2 release. The radio can communicate with nRF24 networks.

    At eBay or aliexpress boards are available starting at 12€. The ob board hardware is:

    • nRF51822QFAA (Cortex-M0, 16kB RAM, 256kb Flash, SPI, I2C, UART...)
    • Two Buttons
    • one RGB LED
    • MPU6050 accelerometer
    • AP3216C distance and ambient light sensor
    • BMP180 pressure and temperature sensor
    • CR2032 Battery Holder

    At the moment I have decoded the layout. There is no arduino-nrf5 board definition. My idea is to build a repository of YAML based board definitions to generate board definitions without letting the list of arduino-nrf5 included boards growing.

    Issues:

    When the arduino-nrf5 board definition is ready, I reply here.


  • Hardware Contributor

    @d00616
    that's a pretty cool board 👍 Now I can't wait to show you mine (not exactly same mcu). Still enjoying your port 😉



  • @scalz Any update on your great looking PIR board/s?


  • Contest Winner

    @scalz I'm curious about your board.



  • I don't know if you already managed to read correctly the BLE data.
    Here follows what I get from this (nice and cheap!) sensor. Any tip about decoding?

    0x6E400002 ACCELEROMETER (Acceleration)
    0xFFA0002A3628 (it seems FA00 for x, 02A3 for y , 3628 for z)

    0x6E400003 GYROSCOPE (Angular velocity)
    0xFFA7007FFFC4

    SERVICE 0x6E400004 BAROMETER (Pressure)
    0x0018BE9 (on the table)
    0x0018BDD (about 50 cm above the table)

    SERVICE 0x6E400005 TEMPERATURE
    0x012E (ambient)
    0x0140 (inside warm hand)

    SERVICE 0x6E400006 AMBIENT LIGHT
    0x0000 (dark)
    0x0936 (direct LED torch)


  • Contest Winner

    @mattewre My plan is to use this sensor with MySensors without a SoftDevice later. I had no time to do more research.



  • I have this board, too; thanks for the pinout! Did anyone get access to a proper schematic in the meantime? E.g. how is the BMP180 connected?



  • As usual, ask for something on a public forum and ~5 minutes later, I finally find it myself:

    http://linksprite.com/wiki/index.php5?title=Bluetooth_4.0_BLE_Sensor_Tag/iBeacon_Station_NRF51822



  • Have someone ready working arduino sketch for this board for sharing?


  • Contest Winner

    @d00616 said in nRF5 Multi Sensor Board (12-14€):

    Sleeping until pin interrupt consumes 1mA -> https://github.com/sandeepmistry/arduino-nRF5/issues/153

    I have found some documentation. The high current consumption was listed as PAN#39 and is fixed with this MCU: http://infocenter.nordicsemi.com/pdf/nRF51822-pan_v3.0.pdf

    The MCU is nRF51822QFAAH0.


  • Hardware Contributor

    @d00616 said in nRF5 Multi Sensor Board (12-14€):

    @d00616 said in nRF5 Multi Sensor Board (12-14€):

    Sleeping until pin interrupt consumes 1mA -> https://github.com/sandeepmistry/arduino-nRF5/issues/153

    I have found some documentation. The high current consumption was listed as PAN#39 and is fixed with this MCU: http://infocenter.nordicsemi.com/pdf/nRF51822-pan_v3.0.pdf

    The MCU is nRF51822QFAAH0.

    I don't see the link with anomaly #39 ?
    But I see it #72 which is not fixed

    72. RTC: Writing to RTC registers without starting the LFCLK could lead to increased current consumption.
    Symptoms:
    Increased current consumption
    .
    Conditions:
    Setting up the RTC by writing to its registers without starting the LFCLK
    .
    Consequences:
    The user will experience an increase in the current consumption of ~1 mA
    .
    Workaround:
    Always run the LFCLK for a minimum of one LFCLK clock cycle after writing to the RTC registers.


  • Hardware Contributor

    @Nca78
    I think it was about the GPIOTE module and pin interrupts needing hfclk, so more power, #39, p.4, listed as fixed


  • Hardware Contributor

    Thank you @scalz I took time for some reading about NRF51 (should have done that before posting stupid things... 😊 ) and it's much clearer now...

    My one and only NRF51822 has build code H0 so it seems I will not pull too many hair when trying to make it run at low power 🙂



  • @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)
    

  • Contest Winner

    @Ptibu said in nRF5 Multi Sensor Board (12-14€):

    @MiKa Here is my sketch if it helps. It uses ALS, BMP180 and RGB leds.
    Working well with my nRF24 LNA+PA GW.

    Thank you sharing your sketch. You can use https://github.com/mysensors/ArduinoHwNRF5 to redefine pin mappings in your sketch.



  • @d00616 Thanks for porting !



  • Hi,
    Thanks for sketch, I will try
    Which interface You use for upload?
    I tryied ST-Link V2 from ebay it seems it working but I cant get working J-link under arduino (J-link also small version from Ali)
    https://www.aliexpress.com/item/Die-Jlink-OB-ARM-emulator-debugger-jlink-programmierer-downloader-link-statt-V8-SWD/32763735160.html?spm=a2g0s.9042311.0.0.VVtIj7
    Regards,
    MiKa



  • I only tried stlink v2 which works pretty well.



  • Hi,
    Works !!! 🙂 👍
    Thanks Ptibu!
    MiKa



  • @mattewre Interesting that you got BLE Services, my board has no services. What .hex file did you flash to get that?

    DO you have a copy?



  • @d00616 really wonderful of you to do the pinout work you have done, thank-you.

    I have got the accelerometer (MPU6050) working as a service in nordic mbed, and I thought I would throw in some of what I learned to add to the great work you have done.

    The schematic shows that the AD0 (pin 9) is floating (it is not, thank heavens!) it is tied to the VLogic pin ( pin 8 ). This results in the 7-Bit address of the board changing from 0x68 to 0x69.

    I hope this helps others.

    Also, other I2C also as posted by @Ptibu

    Bosch BMP180 is 0x77 - untested
    The AP3216C is 0x1E - untested
    MPU6050 is 0x69 - works - tested

    Also pins 17,18,19 are Red Green Blue
    (And not Red Blue Green as shown on the schematic)

    thanks for your help.

    bb



  • Hi Guys

    Sorry for bringing the level of that thread down...

    This little thing looks wonderful... but :

    Could it be a direct replacement of Arduino Pro Mini and nRF24L01+ ?

    Thanks a lot gentlemen !


  • Contest Winner

    @ben999 said in nRF5 Multi Sensor Board (12-14€):

    Could it be a direct replacement of Arduino Pro Mini and nRF24L01+ ?

    Maybe, the NRF5 can replace the combination of ATMEGA+NRF24 chips but it's a 3.3V chip and I don't know an NRF5 board in Arduino Pro Mini layout.

    Please look at https://forum.mysensors.org/topic/6961/nrf5-bluetooth-action/1092 for pros and cons.

    At the moment the radio protocol is a little bit unstable, because there is an hardware issue, which must be fixed in software. At the moment I do a rewrite of the ESB protocol, which fix this issue. My old implementation is hard to debug. With my new implementation the radio states are separated into extra functions and I use more of the nice event driven capabilities (PPI, Shorts). Until I have finished this fix, sometimes an NRF52 needs an reset.



  • @d00616 said in nRF5 Multi Sensor Board (12-14€):

    @d00616 said in nRF5 Multi Sensor Board (12-14€):

    Sleeping until pin interrupt consumes 1mA -> https://github.com/sandeepmistry/arduino-nRF5/issues/153

    I have found some documentation. The high current consumption was listed as PAN#39 and is fixed with this MCU: http://infocenter.nordicsemi.com/pdf/nRF51822-pan_v3.0.pdf

    The MCU is nRF51822QFAAH0.

    I don't know how the sleep is implemented (CONFIG/GPIOTE) and if I'm facing this bug, but my battery lasts 2 days, with a wake-up period of 2 minutes (QFAAH0 MCU)... any idea?


  • Contest Winner

    @Ptibu said in nRF5 Multi Sensor Board (12-14€):

    I don't know how the sleep is implemented (CONFIG/GPIOTE) and if I'm facing this bug, but my battery lasts 2 days, with a wake-up period of 2 minutes (QFAAH0 MCU)... any idea?

    Do you have powered off the MCU after flashing? After programming, the debug interface is active. To disable this interface, you have to reset the MCU.



  • @d00616 said in nRF5 Multi Sensor Board (12-14€):

    @Ptibu said in nRF5 Multi Sensor Board (12-14€):

    I don't know how the sleep is implemented (CONFIG/GPIOTE) and if I'm facing this bug, but my battery lasts 2 days, with a wake-up period of 2 minutes (QFAAH0 MCU)... any idea?

    Do you have powered off the MCU after flashing? After programming, the debug interface is active. To disable this interface, you have to reset the MCU.

    I'm not sure if I reset it. I will check this with a new battery and a multimeter. Thank you for the hint!



  • @ptibu Did you finally solve the power consumption problem? My MCU is even newer (QFAAH1) and consumption is around 1mA all the time, which makes drain the battery in a few days.

    I bought my sensor in Aliexpress and I haven't flashed it. It's running with the code provided by the vendor. Can any of you recommend me a cheap cable/interface to flash it? It would be great to buy one that is already tested with this device. Thanks in advance!



  • Any news?


  • Hardware Contributor

    @aguedob said in nRF5 Multi Sensor Board (12-14€):

    @ptibu Did you finally solve the power consumption problem? My MCU is even newer (QFAAH1) and consumption is around 1mA all the time, which makes drain the battery in a few days.

    Hello, from what I have read the hardware bug is not really fixed on newer version of nrf51822, so it's necessary to use the PORT mode and pin sensing to keep the high frequency clock off and get a really low power consumption.
    I made a test script that is running fine on my boards (5-6 µA in sleep instead of 0.9mA with interrupts), can any of you adapt it (changing pin numbers should be enough for a first test) and test it on this multisensor board ?

    https://forum.mysensors.org/topic/9234/additional-sleep-methods-with-array-of-pins-as-parameters/8



  • Hello, everyone,

    Is it possible to set the range of the sensors (BMP180, AP3216C and MPU6050) on the NRF5 board. I bought the board in Aliexpress which is running with the code provided by the vendor.

    Thank you in advanced,

    Pascal



  • I got some of these from ebay, but they're fitted with nrf51802 QFAAA1 instead of a 51822. I can't find the memory sizes etc. for the 51802 - can they be used ?



  • @aguedob I do not have much time these days, and do not investigate the power consumption issue, But this is not a reset issue...
    @Nca78 Nice information. should give this a try when I'll be less busy.


  • Hardware Contributor

    @ptibu said in nRF5 Multi Sensor Board (12-14€):

    @Nca78 Nice information. should give this a try when I'll be less busy.

    If you do, start from the full code that I posted here : https://drive.google.com/open?id=1IhLIx0nHd5KZR9dJ9qA0-_SMGmjEpbKj



  • Hi,
    I got this error, what wrong???

    Using precompiled core
    Linking everything together...
    "C:\Users\MiKa\AppData\Local\Arduino15\packages\sandeepmistry\tools\gcc-arm-none-eabi\5_2-2015q4/bin/arm-none-eabi-gcc" "-LC:\Users\MiKa\AppData\Local\Temp\arduino_build_372810" -Os -Wl,--gc-sections -save-temps "-LC:\Users\MiKa\AppData\Local\Arduino15\packages\sandeepmistry\hardware\nRF5\0.5.1\cores\nRF5/SDK/components/toolchain/gcc/" "-LC:\Users\MiKa\AppData\Local\Arduino15\packages\sandeepmistry\hardware\nRF5\0.5.1\cores\nRF5/SDK/components/softdevice/none/toolchain/armgcc/" "-Tnrf51_xxaa.ld" "-Wl,-Map,C:\Users\MiKa\AppData\Local\Temp\arduino_build_372810/_22_Door_Sensor.ino.map" --specs=nano.specs --specs=nosys.specs -mcpu=cortex-m0 -mthumb -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -o "C:\Users\MiKa\AppData\Local\Temp\arduino_build_372810/_22_Door_Sensor.ino.elf" "C:\Users\MiKa\AppData\Local\Temp\arduino_build_372810\sketch\app_error.c.o" "C:\Users\MiKa\AppData\Local\Temp\arduino_build_372810\sketch\app_error_weak.c.o" "C:\Users\MiKa\AppData\Local\Temp\arduino_build_372810\sketch\app_gpiote.c.o" "C:\Users\MiKa\AppData\Local\Temp\arduino_build_372810\sketch\MyBoardNRF5.cpp.o" "C:\Users\MiKa\AppData\Local\Temp\arduino_build_372810\sketch_22_Door_Sensor.ino.cpp.o" "C:\Users\MiKa\AppData\Local\Temp\arduino_build_372810\core\variant.cpp.o" -Wl,--start-group -lm "C:\Users\MiKa\AppData\Local\Temp\arduino_build_372810/..\arduino_cache_2928\core\core_MySensors_nRF5_MyBoard_nRF51822_chip_xxaa,bootcode_none,lfclk_lfxo_89b01c12b33d173746e7c52b6a4ab42a.a" -Wl,--end-group
    C:\Users\MiKa\AppData\Local\Temp\arduino_build_372810/..\arduino_cache_2928\core\core_MySensors_nRF5_MyBoard_nRF51822_chip_xxaa,bootcode_none,lfclk_lfxo_89b01c12b33d173746e7c52b6a4ab42a.a(WInterrupts.c.o): In function `GPIOTE_IRQHandler':

    C:\Users\MiKa\AppData\Local\Arduino15\packages\sandeepmistry\hardware\nRF5\0.5.1\cores\nRF5/WInterrupts.c:129: multiple definition of `GPIOTE_IRQHandler'

    C:\Users\MiKa\AppData\Local\Temp\arduino_build_372810\sketch\app_gpiote.c.o:C:\Users\MiKa\AppData\Local\Temp\arduino_build_372810\sketch/app_gpiote.c:79: first defined here

    c:/users/mika/appdata/local/arduino15/packages/sandeepmistry/tools/gcc-arm-none-eabi/5_2-2015q4/bin/../lib/gcc/arm-none-eabi/5.2.1/../../../../arm-none-eabi/bin/ld.exe: warning: changing start of section .heap by 4 bytes

    c:/users/mika/appdata/local/arduino15/packages/sandeepmistry/tools/gcc-arm-none-eabi/5_2-2015q4/bin/../lib/gcc/arm-none-eabi/5.2.1/../../../../arm-none-eabi/bin/ld.exe: warning: changing start of section .stack_dummy by 4 bytes

    c:/users/mika/appdata/local/arduino15/packages/sandeepmistry/tools/gcc-arm-none-eabi/5_2-2015q4/bin/../lib/gcc/arm-none-eabi/5.2.1/../../../../arm-none-eabi/bin/ld.exe: warning: changing start of section .heap by 4 bytes

    c:/users/mika/appdata/local/arduino15/packages/sandeepmistry/tools/gcc-arm-none-eabi/5_2-2015q4/bin/../lib/gcc/arm-none-eabi/5.2.1/../../../../arm-none-eabi/bin/ld.exe: warning: changing start of section .stack_dummy by 4 bytes

    c:/users/mika/appdata/local/arduino15/packages/sandeepmistry/tools/gcc-arm-none-eabi/5_2-2015q4/bin/../lib/gcc/arm-none-eabi/5.2.1/../../../../arm-none-eabi/bin/ld.exe: warning: changing start of section .heap by 4 bytes

    c:/users/mika/appdata/local/arduino15/packages/sandeepmistry/tools/gcc-arm-none-eabi/5_2-2015q4/bin/../lib/gcc/arm-none-eabi/5.2.1/../../../../arm-none-eabi/bin/ld.exe: warning: changing start of section .stack_dummy by 4 bytes

    collect2.exe: error: ld returned 1 exit status

    Using library MySensors-development at version 2.3.0-alpha in folder: C:\Users\MiKa\Documents\Arduino\libraries\MySensors-development
    exit status 1
    Error compiling for board MyBoardNRF5 nRF51822.


  • Hardware Contributor

    @mika sorry I think I forgot to include in the code the instruction :

    In the WInterrupt.c file before the GPIOTE_IRQHandler you need to include a weak attribute so it can be overridden :

    __attribute__ ((weak))
    void GPIOTE_IRQHandler()
    

    It's the file linked in your error message :
    C:\Users\MiKa\AppData\Local\Arduino15\packages\sandeepmistry\hardware\nRF5\0.5.1\cores\nRF5/WInterrupts.c:129



  • @nca78 said in nRF5 Multi Sensor Board (12-14€):

    attribute ((weak))

    Thanks,Compilation OK 👍



  • Dear colleagues!

    I have this nice nRF51 sensor tag. May be you can help me to understand the limitations of this board.
    I want to make wireless water tank cap opening sensor. I have another device (my own development) with bluetooth BLE interface, with external power supply which will act as receiver.

    And I'd like to use nRF51 as wireless battery powered cap opening sensor. As I can understand in Aliexpress-version it is not possible (short battery life). I think I must make new firmware at least.
    But is it possible to do onboard ?

    1. Switch off BLE transmission but still make onboard analysis of fuel cap movement with MPU6050
    2. When cap open event is detected (my MPU6050 data) - wake up BLE and start transmission.

    Or may be Low power BLE mode will shut up MPU6050 transmission too and this mission is impossible?

    Many thanks!


  • Hardware Contributor

    @mechand use MySensors you can send a message only when you want without any tricks with BLE.
    And BLE/radio and accelerometer are 2 different things so you should be able to shut down BLE and go to sleep after configuring the accelerometer to generate an interrupt if it detects movement. But if you want to stick to BLE the solution is probably to advertise with big intervals, current battery drain is not due to BLE but due to a hardware problem with pin interrupts.



  • This post is deleted!


  • @artag The nRF51802 QFAA has 256k Flash and 16k RAM. It is pin to pin compatible with the nRF51822QFAA in the QFN48 package, 6x6 mm. Note that some of the parameters for the nRF51802 are slightly looser then the nRF51822. (Current consumption, wakeup time, sensitivity)


 

395
Online

7.7k
Users

8.6k
Topics

92.3k
Posts