Page 1 of 2 12 LastLast
Results 1 to 10 of 16

Thread: Talk2 Whisper Node

  1. #1
    Administrator
    Join Date
    Jan 2015
    Posts
    1,244

    Talk2 Whisper Node

    http://www.talk2store.wisen.com.au/p...3-94f7e8973e47

    Ok, I ordered their 3 pack. I've been looking for a small arduino device to run off of battery for the past 6+ months for a project I'm working on. I also picked up a FT232RL FTDI USB to TTL adapter to program it.

    I initially started out with some nano's and nrf24L01+ wireless mods. Even with 3.3v regulator adapters, I had problems with good power off the nano's I had. While I liked the nrf24l01's, with the flaky connections and the added cost for the breakout adapter, it was time to look at other options.

    So I next picked up a couple of ESP8266 dev boards. While these were good for quick 2.4Ghz hookup to wireless, I needed longer range than what wifi provided.

    I'm going to document how these work out for me. They look promising with the 1.5 km range (.93 miles) if LOS. If these work for my current project I'll be looking at a few more of them

  2. #2
    Administrator
    Join Date
    Jan 2015
    Posts
    1,244
    They shipped from AU, right before Christmas, stating 7-15 days travel time and made it in about 14 (2 days before Christmas). I wasn't sure, based on when I ordered them if they'd make it in the stated time or not.

    The creator of the board did a nice video here on the whole unboxing aspect:
    https://www.youtube.com/watch?v=6vxTXlfrKUQ

    The video nicely represents what was in the package. For me, the 3 devices came nicely packaged in their own static bags, with header pins to solder to the FTDI pins if needed along with the others as required if you wanted to put it in a breadboard.

    The antenna's came in the box as well, labeled for the correct Mhz range they are, in this case 915 Mhz.

    The boards themselves are Whisper Node v0.3 boards. The boards are marked as 915 H (there are 433 and 868 versions that you can order as well, depending on where in the world you are)

  3. #3
    Administrator
    Join Date
    Jan 2015
    Posts
    1,244
    Hooking up the FTDI to the whisper node I first made sure antenna was attached to it. While there is nothing specific on their end on doing this, I remember on some other devices it is highly recommended to make sure they are attached before powering them up. Not sure if that is an issue with these or not, but figured better safe than sorry on a $25ish device.

    The cable between the FTDI USB adapter and the whisper node is a straight through cable as far as I can tell from the video and the print out. To me it looks like they inverted the TX/RX on the whisper node for you, so that you don't have to cross them over, but I'm still early on, so this may be incorrect.

    Opening up the arduino software (or any term program), set it at correct speed (115200) you can get some initial info, such as:

    ============================================
    T A L K 2 W H I S P E R N O D E 0.3v
    ============================================

    Major Version: 1
    Minor Version: 4
    Running Mode: Client

    ## Configuration ##

    :: SPI Flash ::
    JEDEC ID: EF3013
    Unique ID: D7:65:A4:5:83:CUT
    Write Protection: 100

    :: Radio RFM69 ::
    Frequency: 916.0000000000MHz
    TX Power: 14dBm
    Encryption Key: 0:1:2:3:4:5:6:7:8:9:A:B:C:E:F:

    :: Supply Voltages ::
    Battery: 0mV
    Micro-USB/VIN: 3552mV

    :: Talk2 Bootloader ::
    Major Version: 2
    Minor Version: 1
    EEPROM Data: 54:6C:6B:B2:1:A:0:7:0:0:0:0:0:0:11:A:0:0:1:FF:FF:F F:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:

    ============================================
    Heading out to their documentation, as of this writing, found here: https://bitbucket.org/talk2/whisper-node-avr

    Under the Arduino IDE Boards section, there is a URL to add to your IDE prefs so that it will properly detect your new device. Currently that is here: http://talk2arduino.wisen.com.au/mas...com_index.json

    Note, I had 1.6.2 installed, and it didn't have an option as described at their pages to manage other boards. Upgrading to 1.8 solved that problem though. As a side note, 1.8 also noted some of my libraries had updates and prompted me through a library manager to update them (very cool new feature).

    To make sure things were initially working I uploaded a test blink sketch
    void setup() {
    pinMode(9, OUTPUT);
    }

    void loop() {
    digitalWrite(9, HIGH);
    delay(2000);
    digitalWrite(9, LOW);
    delay(1000);
    }
    After I made sure that was working I reset to factor defaults again based on what they showed in the video I linked to.

    The idea that i can upload any sketch to make it the default there is very sweet. It means I can upload version 1.0 of my program to it and get a default to always fail back to in the future in theory. We'll see how that works in the long term, but for now, very cool and things are all good.

    Things left to do:
    1. Find code to get 2 of them talking
    2. Get them to run off of battery
    3. Find out what their range really is

    More to come

  4. #4
    Administrator
    Join Date
    Jan 2015
    Posts
    1,244
    Oh, powered all 3 up to verify they all worked and that my soldering worked

  5. #5
    Administrator
    Join Date
    Jan 2015
    Posts
    1,244
    Using the RadioHead library found here: https://github.com/PaulStoffregen/RadioHead

    I uploaded the example server and client software, changing the following:
    Console speed = 115200
    setFrequency = 916.0
    uncommented out rf69.setTxPower(14) since this is a high power module

    Had hello world beaming back and forth with no issues in no time flat (took longer to find the RadioHead library)

    At this point, just tried 2 of the 3 and it is now going on 00:25 on 2017-01-01, but it was a good way to ring in the new year from my perspective, had these up and running in short time, much less headache than nano's and NRF24's, at least for me. While $25ish each is a bit more (ok probably 2-3 times more than what I could put the nano/NRF24's together at), the fact that they work out of the box says a lot about them!

    I do wish they had a usb to serial built into them like a nano, but I'm sure there is a reason and honestly using the FTDI's on them isn't a big deal and I'm glad I bought 2, but it would be nice. Granted I can still power them off a usb once the code is uploaded, so all good there I think.

    More tomorrow, calling it for now.

  6. #6
    Administrator
    Join Date
    Jan 2015
    Posts
    1,244
    Attempted to hook it up to a few of the lcd screens I have around today. Unfortunetly all the ones I have are 5V and the board only outputs 3.3V, so ordered a few 3.3V IIC Serial 128x64 Oled LED modules.

    I also hooked my transmitter one up to one of my battery packs, couldn't figure out why it stopped working, until I remembered that that kit has a "feature" in it to auto turn off if the amperage pull isn't high enough, to keep it from just bleeding power. Had to switch to one of my other battery packs for it, thing takes so little juice it wouldn't keep the other pack turned on!

    So end of week, when the new displays come in, I'll hook up the display and start walking away from the transmitter, see how far away I can get and still get a single.

    The transmitter is simply sending out an incrementing number every 1 sec, simple enough. If the counter keeps incrementing on my lcd, i'm still in range! Once I get an idea of range then I'll work on some other code, changing the encryption key and other fun filled things.

  7. #7
    Administrator
    Join Date
    Jan 2015
    Posts
    1,244
    Ok Client code, just a slight modification from the example code they have to increment a counter so I can tell for sure it is sending:

    // rf69_client.pde
    // -*- mode: C++ -*-
    // Example sketch showing how to create a simple messageing client
    // with the RH_RF69 class. RH_RF69 class does not provide for addressing or
    // reliability, so you should only use RH_RF69 if you do not need the higher
    // level messaging abilities.
    // It is designed to work with the other example rf69_server.
    // Demonstrates the use of AES encryption, setting the frequency and modem
    // configuration
    // Tested on Moteino with RFM69 http://lowpowerlab.com/moteino/
    // Tested on miniWireless with RFM69 www.anarduino.com/miniwireless

    #include <SPI.h>
    #include <RH_RF69.h>

    // Singleton instance of the radio driver
    RH_RF69 rf69;

    int x = 0;

    void setup()
    {
    Serial.begin(115200);
    if (!rf69.init())
    Serial.println("init failed");
    // Defaults after init are 434.0MHz, modulation GFSK_Rb250Fd250, +13dbM
    // No encryption
    if (!rf69.setFrequency(916.0))
    Serial.println("setFrequency failed");

    // If you are using a high power RF69, you *must* set a Tx power in the
    // range 14 to 20 like this:
    rf69.setTxPower(14);

    // The encryption key has to be the same as the one in the server
    uint8_t key[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
    0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
    rf69.setEncryptionKey(key);
    }


    void loop()
    {
    Serial.println("Sending to rf69_server");
    // Send a message to rf69_server
    String msg;
    msg = String(x) + " Hello World";
    x++;
    int msgLen = msg.length() + 1;
    uint8_t data[msgLen];
    msg.getBytes(data, msgLen);
    rf69.send(data, sizeof(data));

    rf69.waitPacketSent();
    // Now wait for a reply
    uint8_t buf[RH_RF69_MAX_MESSAGE_LEN];
    uint8_t len = sizeof(buf);

    if (rf69.waitAvailableTimeout(500))
    {
    // Should be a reply message for us now
    if (rf69.recv(buf, &len))
    {
    Serial.print("got reply: ");
    Serial.println((char*)buf);
    }
    else
    {
    Serial.println("recv failed");
    }
    }
    else
    {
    Serial.println("No reply, is rf69_server running?");
    }
    delay(5000);
    }

  8. #8
    Administrator
    Join Date
    Jan 2015
    Posts
    1,244
    After numerous tries with OLED libraries I finally used u8x8
    https://github.com/olikraus/u8g2/wiki/u8x8reference

    For those interested the OLED's I bought were these:
    https://www.amazon.com/gp/product/B0...?ie=UTF8&psc=1
    For $9/each they are fine. The whole yellow/blue is a little odd, no control over it, 2 lines of text are yellow, the next 6 are blue.

    It is small enough that I can utilize other libraries for things like my radio and not run out of memory.
    - I tried the adafruit one, but it was complaining with just the example code
    - tried u8Glib, which is a nice library, smaller than the adafruit one, but still not quite small enough and no longer supported
    - tried u8g2, which is the newer version of the above, but once I got all the code in and my radio stuff, back to memory issues
    - thankfully u8g2 came with u8x8 or at least that is how I found it.

    Code on my server, here simply so others can test it as well, assuming they get an I2C OLED screen

    // rf69_server.pde
    // -*- mode: C++ -*-
    // Example sketch showing how to create a simple messageing server
    // with the RH_RF69 class. RH_RF69 class does not provide for addressing or
    // reliability, so you should only use RH_RF69 if you do not need the higher
    // level messaging abilities.
    // It is designed to work with the other example rf69_client
    // Demonstrates the use of AES encryption, setting the frequency and modem
    // configuration.
    // Tested on Moteino with RFM69 http://lowpowerlab.com/moteino/
    // Tested on miniWireless with RFM69 www.anarduino.com/miniwireless

    //#include <OneWire.h>
    //#include <DallasTemperature.h>
    #include <SPI.h>
    #include <RH_RF69.h>
    #include <Arduino.h>
    #include <U8x8lib.h>

    RH_RF69 rf69;
    U8X8_SSD1306_128X64_NONAME_SW_I2C u8x8(/* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); // OLEDs without Reset of the Display


    void setup()
    {
    Serial.begin(115200);

    u8x8.begin();
    u8x8.setPowerSave(0);

    u8x8.setFont(u8x8_font_amstrad_cpc_extended_r);

    if (!rf69.init())
    Serial.println("init failed");
    u8x8.drawString(0,1,"Initilization:");
    u8x8.drawString(0,2,"Failed");
    delay(100);
    // Defaults after init are 434.0MHz, modulation GFSK_Rb250Fd250, +13dbM
    // No encryption
    if (!rf69.setFrequency(916.0)) {
    Serial.println("setFrequency failed");
    u8x8.drawString(0,1,"Initilization:");
    u8x8.drawString(0,2,"Failed to turn on radio");
    delay(100);
    }
    else {
    Serial.println("all worky worky");
    u8x8.drawString(0,1,"Initilization:");
    u8x8.drawString(0,2,"Radio seems good");
    delay(100);
    }

    // If you are using a high power RF69, you *must* set a Tx power in the
    // range 14 to 20 like this:
    rf69.setTxPower(14);

    // The encryption key has to be the same as the one in the client
    uint8_t key[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
    0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
    rf69.setEncryptionKey(key);

    #if 0
    // For compat with RFM69 Struct_send
    rf69.setModemConfig(RH_RF69::GFSK_Rb250Fd250);
    rf69.setPreambleLength(3);
    uint8_t syncwords[] = { 0x2d, 0x64 };
    rf69.setSyncWords(syncwords, sizeof(syncwords));
    rf69.setEncryptionKey((uint8_t*)"thisIsEncryptKey" );
    #endif
    }

    void loop()
    {
    if (rf69.available())
    {
    // Should be a message for us now
    uint8_t buf[RH_RF69_MAX_MESSAGE_LEN];
    uint8_t len = sizeof(buf);
    if (rf69.recv(buf, &len))
    {
    // RF69:rintBuffer("request: ", buf, len);
    Serial.print("got request: ");
    Serial.println((char*)buf);
    u8x8.clearDisplay();
    // Serial.print("RSSI: ");
    // Serial.println(rf69.lastRssi(), DEC);

    u8x8.drawString(0,0,"got request");
    u8x8.drawString(0,1,(char*)buf);

    // Send a reply
    uint8_t data[] = "And hello back to you";
    rf69.send(data, sizeof(data));
    rf69.waitPacketSent();
    Serial.println("Sent a reply");
    u8x8.drawString(0,3,"sent reply");
    //u8x8.refreshDisplay(); // for SSD1606

    }
    else
    {
    Serial.println("recv failed");
    }
    }
    }

  9. #9
    Administrator
    Join Date
    Jan 2015
    Posts
    1,244
    I'm amazed at how many hours went into getting a stupid display setup for this thing. The biggest issue was finding a library that worked for me, but even then, trying to figure out what one to turn on for it to work. So many different ones out there. For me, the cheap I2C OLED that was 4 pin only, with no reset ended up being:
    U8X8_SSD1306_128X64_NONAME_SW_I2C u8x8(/* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); // OLEDs without Reset of the Display

    It just uses SCL, SDA, a ground and 3.3v.

    As noted before, that was the other headache, finding a 3.3 screen so I didn't have to provide power to the screen some other way.

    Anyway, now that this is done...

    Things left to do:
    1. Get them to run off of battery - technically done, just powering it from a USB 18650 battery pack
    2. Find out what their range really is and if I need to play with the Tx power setting and increase to 20 perhaps.
    3. Work on having 2 send at the same time and the server differentiate them.

  10. #10
    Administrator
    Join Date
    Jan 2015
    Posts
    1,244
    While I did add the radiohead library at some point, not sure if documented above or not, today I decided I wanted to get the talk2 libraries themselves, so I followed their documentation here:
    https://bitbucket.org/talk2/talk2-library

    This gave me the examples for voltage .node and .base (for sending voltage from a node to a base station).

    I need to add this general piece into my project to monitor the voltage on the remote node, that will be running off 2 x AAA batteries.

    One thing I really like about the developer on this is he put a nice blog writeup on battery use here:
    https://talk2.wisen.com.au/2016/12/0...rs-by-battery/

    I've only glanced through it, but it seems to provide some nice details, that for people in the field, probably not that great, but for someone that hadn't thought about current draw, recovery time, etc on batteries it was very nice!

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •