Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
  1. Home
  2. My Project
  3. Portable RFM69 Signal Scanner

Portable RFM69 Signal Scanner

Scheduled Pinned Locked Moved My Project
10 Posts 5 Posters 9.8k Views 7 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • gohanG Offline
    gohanG Offline
    gohan
    Mod
    wrote on last edited by
    #1

    Just wanted to share my tonight creation
    0_1508188047036_upload-ad843227-d291-4f19-874f-5437afd020c8
    It shows Send and Receive RSSI and vcc (that btw is measured via voltage divider and is spot on with my multimeter)

    1 Reply Last reply
    6
    • N Offline
      N Offline
      NeverDie
      Hero Member
      wrote on last edited by
      #2

      Nice job! Looks very dapper.

      Alternatively, you may (?) be able to plug your screen directly into the I2C connector used for the TH sensor on:
      https://www.openhardware.io/view/268/Arduino-Pro-Mini-Shield-for-RFM69HW
      Depends on the pinout, of course.

      1 Reply Last reply
      0
      • gohanG Offline
        gohanG Offline
        gohan
        Mod
        wrote on last edited by
        #3

        I thought about it but Vin and GND are swapped

        1 Reply Last reply
        0
        • O Offline
          O Offline
          ooznerol
          wrote on last edited by ooznerol
          #4

          Hi great work. Could you give us more details please?

          Which version of mysensors do you use ? RF power report seems only availble in dev branch isn't it?

          Thanks

          1 Reply Last reply
          0
          • gohanG Offline
            gohanG Offline
            gohan
            Mod
            wrote on last edited by
            #5

            Yes, I'm using latest version in dev branch. I also figured I can show both power level and power percentage ( I removed the "VCC" from lcd as it is not really necessary :) )

            1 Reply Last reply
            0
            • gohanG Offline
              gohanG Offline
              gohan
              Mod
              wrote on last edited by
              #6

              Here is the new code that uses the TX power readings. I think that RSSI values and tx power values could be useful to be reported by nodes every once and a while, at least to provide a feedback on how they are doing.

              #include <U8glib.h>
              #include <Wire.h>
              
              //#define MY_DEBUG  // Enable debug prints
              
              U8GLIB_SSD1306_128X64 lcd(U8G_I2C_OPT_DEV_0 | U8G_I2C_OPT_NO_ACK | U8G_I2C_OPT_FAST);	// Fast I2C / TWI 
              
              #define MY_RADIO_RFM69
              #define MY_RFM69_FREQUENCY RFM69_433MHZ
              #define MY_RFM69_NEW_DRIVER
              #define MY_TRANSPORT_WAIT_READY_MS 10000
              //#define MY_NODE_ID 240
              //#define VBAT_VCC 
              
              #include <SPI.h>
              #include <MySensors.h>  
              
              
              #define CHILD_ID_VBAT 201						 // Battery voltage
              
              	unsigned long SLEEP_TIME = 2000; // Sleep time between reads (in milliseconds)
              
              #define SKETCH_NAME "Signal Monitor"                // Change to a fancy name you like
              #define SKETCH_VERSION "1.0"                    // Your version
              
              MyMessage msgVBat(CHILD_ID_VBAT, V_VOLTAGE);
              
              int Send_rssi, Rec_rssi;                                    // RSSI RFM69 chip
              #define CHILD_ID_RSSI_HIGH  7                // RSSI received signal level
              #define CHILD_ID_RSSI_LOW   8                // RSSI background noise level
              MyMessage msgRSSI1(CHILD_ID_RSSI_HIGH, V_LEVEL);
              MyMessage msgRSSI2(CHILD_ID_RSSI_LOW, V_LEVEL);
              
              
              //=========================
              // BATTERY VOLTAGE DIVIDER SETUP
              // 1M, 470K divider across battery and using internal ADC ref of 1.1V
              // Sense point is bypassed with 0.1 uF cap to reduce noise at that point
              // ((1e6+470e3)/470e3)*1.1 = Vmax = 3.44 Volts
              // 3.44/1023 = Volts per bit = 0.003363075
              #define VBAT_PER_BITS 0.003363075  
              #define VMIN 2.8                                  //  Vmin (radio Min Volt)=1.9V (564v)
              #define VMAX 3.44                                 //  Vmax = (2xAA bat)=3.0V (892v)
              int batteryPcnt = 0;                              // Calc value for battery %
              int batLoop = 0;                                  // Loop to help calc average
              int batArray[3];                                  // Array to store value for average calc.
              float Vbat;
              
              #ifdef VBAT_VCC
              #include <Vcc.h>
              const float VccCorrection = 1.0 / 1.0;  // Measured Vcc by multimeter divided by reported Vcc
              Vcc vcc(VccCorrection);
              #else
              int BATTERY_SENSE_PIN = A0;                       // select the input pin for the battery sense point
              #endif // VBAT_VCC
              
              void setup()
              {
              	analogReference(INTERNAL);             // For battery sensing
              	lcd.setFont(u8g_font_unifont);
              	
              }
              
              void presentation()
              {
              	// Send the Sketch Version Information to the Gateway
              	sendSketchInfo(SKETCH_NAME, SKETCH_VERSION);
              
              	// Register all sensors to gw (they will be created as child devices)
              	present(CHILD_ID_RSSI_HIGH, S_SOUND);
              	present(CHILD_ID_RSSI_LOW, S_SOUND);
              	present(CHILD_ID_VBAT, S_MULTIMETER);
              }
              
              void loop()
              {
              	delay(500); // Allow time for radio if power used as reset
              
              	Send_rssi = RFM69_getSendingRSSI();             // read RSSI in RFM69. Measure reception signal from gw
              	send(msgRSSI1.set(Send_rssi));                  // send RSSI level
              	wait(500);                                 // wait to get idle
              
              	Rec_rssi = RFM69_getReceivingRSSI();           // read RSSI in RFM69. Wait and measure background noise
              	send(msgRSSI2.set(Rec_rssi));                  // send RSSI level
              	wait(200);                                 // wait for next send
              
              	batM();
              	lcd.firstPage();
              	do {
              		UpdateDisplay();
              	} while (lcd.nextPage());
              	
              	sleep(SLEEP_TIME); //sleep a bit
              }
              
              void UpdateDisplay()
              {	
              	lcd.setPrintPos(0, 20);
              	String row;
              	row = (String)"S/R: " + Send_rssi + "/"+ Rec_rssi +"db";
              	lcd.print(row);
              	lcd.setPrintPos(0, 42);
              	row = (String)"Pwr%: " + RFM69_getTxPowerPercent() + "%";
              	lcd.print(row);
              	lcd.setPrintPos(0, 64);
              	row = (String)"PWR: " + RFM69_getTxPowerLevel() + "db";
              	lcd.print(row);
              }
              
              void batM() //The battery calculations
              {
              	delay(500);
              	
              	int batteryPcnt;
              
              	// Battery monitoring reading
              #ifdef VBAT_VCC
              	Vbat = vcc.Read_Volts();
              	batteryPcnt = vcc.Read_Perc(VMIN, VMAX);
              #else 
              	int sensorValue = analogRead(BATTERY_SENSE_PIN);
              	Vbat = sensorValue * VBAT_PER_BITS;
              	// Calculate the battery in %
              	batteryPcnt = static_cast<int>(((Vbat - VMIN) / (VMAX - VMIN))*100.);
              #endif 
              
              	delay(500);
              	send(msgVBat.set(Vbat, 2));
              	Serial.print("Battery percent: "); Serial.print(batteryPcnt); Serial.println(" %");
              
              	// Add it to array so we get an average of 3 (3x20min)
              	batArray[batLoop] = batteryPcnt;
              
              	if (batLoop > 2) {
              		batteryPcnt = (batArray[0] + batArray[1] + batArray[2] + batArray[3]);
              		batteryPcnt = batteryPcnt / 3;
              
              		if (batteryPcnt > 100) {
              			batteryPcnt = 100;
              		}
              
              		Serial.print("Battery Average (Send): "); Serial.print(batteryPcnt); Serial.println(" %");
              		sendBatteryLevel(batteryPcnt);
              		batLoop = 0;
              	}
              	else
              	{
              		batLoop++;
              	}
              }
              
              1 Reply Last reply
              1
              • G Offline
                G Offline
                Grubstake
                wrote on last edited by
                #7

                Nice clean signal scanner build! I must have one.

                Is that an open source proto board you used? I couldn't find it poking around a bit.

                Thanks for sharing it!

                mfalkviddM 1 Reply Last reply
                0
                • G Grubstake

                  Nice clean signal scanner build! I must have one.

                  Is that an open source proto board you used? I couldn't find it poking around a bit.

                  Thanks for sharing it!

                  mfalkviddM Offline
                  mfalkviddM Offline
                  mfalkvidd
                  Mod
                  wrote on last edited by
                  #8

                  @grubstake I think it is an earlier revision of https://www.openhardware.io/view/389/EasyNewbie-PCB-RFM69-HWW-edition-for-MySensors

                  G 1 Reply Last reply
                  0
                  • mfalkviddM mfalkvidd

                    @grubstake I think it is an earlier revision of https://www.openhardware.io/view/389/EasyNewbie-PCB-RFM69-HWW-edition-for-MySensors

                    G Offline
                    G Offline
                    Grubstake
                    wrote on last edited by Grubstake
                    #9

                    @mfalkvidd
                    Thanks, it looks like the Rev 9?, where the older pic you posted looks like a smaller version. I didn't realize the board was rearranged between Rev9 and recent R10.

                    1 Reply Last reply
                    0
                    • gohanG Offline
                      gohanG Offline
                      gohan
                      Mod
                      wrote on last edited by
                      #10

                      Yes, that was Rev 9, but the sketch would work with anything you have

                      1 Reply Last reply
                      0

                      Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                      Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                      With your input, this post could be even better 💗

                      Register Login
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      12

                      Online

                      12.0k

                      Users

                      11.2k

                      Topics

                      113.4k

                      Posts


                      Copyright 2025 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • MySensors
                      • OpenHardware.io
                      • Categories
                      • Recent
                      • Tags
                      • Popular