Navigation

    • Register
    • Login
    • OpenHardware.io
    • Categories
    • Recent
    • Tags
    • Popular
    1. Home
    2. KevinT
    3. Topics
    • Profile
    • Following
    • Followers
    • Topics
    • Posts
    • Best
    • Groups

    Topics created by KevinT

    • KevinT

      Halloween Lights
      My Project • led strip light ws2812b • • KevinT  

      1
      3
      Votes
      1
      Posts
      25
      Views

      No one has replied

    • KevinT

      Washer & dryer monitor
      My Project • • KevinT  

      15
      1
      Votes
      15
      Posts
      201
      Views

      kirianjahiem

      github would be awesome!!
    • KevinT

      Sleep for SAMD, STM32 ?
      Hardware • • KevinT  

      7
      0
      Votes
      7
      Posts
      66
      Views

      KevinT

      @mfalkvidd Good point. I don't know too much about the library, but if that's all it takes, I'll definitely try it.
    • KevinT

      Gateway report all nodes rf power
      General Discussion • mysensors • • KevinT  

      4
      0
      Votes
      4
      Posts
      44
      Views

      mfalkvidd

      @KevinT every time, yes. I don't know the relation to processing.
    • KevinT

      RFM69HW & ATC not working
      Troubleshooting • rfm69 • • KevinT  

      10
      0
      Votes
      10
      Posts
      123
      Views

      scalz

      @KevinT yes in general subghz radios have better range than 2.4ghz. I might have farther nodes but for example, I have one rfm69cw at 55m from the GW and it's ok, with many obstacles on the path (7x rock walls, a part of the roof is metallic, metallic doors etc). This depends on many factors of course
    • KevinT

      Home Assistant errors with serial gateway
      Home Assistant • gateway • • KevinT  

      5
      0
      Votes
      5
      Posts
      70
      Views

      KevinT

      Hi electrik, Yes, my nodes send the sketch name within the presentation function. As for the gateway, I have not set up a sketch name, the example I found did not implement this, so I didn't think it was necessary? I manually named the gateway node in the configuration.yaml file, and the "missing sketch name" message no longer appears in the log. I guess, I'll add an entry for node 0 (controller) as well . I'm still getting the "USB0 not ready after 15.0 secs" at startup, but all seems to work regardless. I connected the gateway to my pc using mycontroller, it all works fine. Logs look normal. Here is the code for one of my nodes, a temperature node with Arduino mini & RFM69 radio, running on battery. // Enable debug prints to serial monitor #define MY_DEBUG #define MY_BAUD_RATE 38400 // Enable and select radio type attached //#define MY_RADIO_RF24 #define MY_RADIO_RFM69 #define MY_IS_RFM69HW #define MY_RFM69_FREQUENCY RFM69_915MHZ #include <MySensors.h> #include <DallasTemperature.h> #include <OneWire.h> #define COMPARE_TEMP 0 // Send temperature only if changed? 1 = Yes 0 = No #define ONE_WIRE_BUS 8 // Pin where dallas sensor is connected #define CHILD_ID_TEMP 0 #define CHILD_ID_BATT 1 // function protos void ReadBat(double& b, uint8_t& bPct); unsigned long SLEEP_TIME = 300000; // Sleep time between reads (5min) (in milliseconds) const int BAT_V = A0; // battery voltage, AnaIn 0 OneWire oneWire(ONE_WIRE_BUS); // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs) DallasTemperature sensors(&oneWire); // Pass the oneWire reference to Dallas Temperature. float lastTemperature; double bat, lastBat=0.0; uint8_t batPct; int numSensors=0; bool receivedConfig = false; bool metric = true; bool initialValuesSent = false; bool initialValTempSent = false; bool initialValBatSent = false; // Initialize message objects MyMessage msg(CHILD_ID_TEMP, V_TEMP); MyMessage msgBatt(CHILD_ID_BATT, V_VOLTAGE); void before() { // Startup up the OneWire library sensors.begin(); } void setup() { sensors.setWaitForConversion(false); // requestTemperatures() will not block current thread Serial.print("Found "); Serial.print(sensors.getDeviceCount(), DEC); Serial.println(" temperature devices."); sensors.requestTemperatures(); } void presentation() { Serial.println("Sending presentation"); // Send the sketch version information to the gateway and Controller sendSketchInfo("Temperature Sensor", "1.2"); // Present all sensors to controller present(CHILD_ID_TEMP, S_TEMP, "Bed room Temperature"); present(CHILD_ID_BATT, S_MULTIMETER, "Bed room node Voltage"); } void loop() { int16_t conversionTime = 0; float temperature = 0; if (!initialValuesSent) { Serial.println("Sending initial value"); // Read in the battery voltage ReadBat(bat, batPct); // get temperature conversion time conversionTime = sensors.millisToWaitForConversion(sensors.getResolution()); wait(conversionTime); // Fetch temperature temperature = sensors.getTempCByIndex(0); // send the temperature reading // set(float value, uint8_t decimals) send(msg.set(temperature, 2)); Serial.println("Requesting initial Temp value from controller"); request(CHILD_ID_TEMP, V_TEMP); wait(2000, C_SET, V_TEMP); // send bat voltage send(msgBatt.set(bat, 2)); Serial.println("Requesting initial Batt value from controller"); request(CHILD_ID_BATT, V_VOLTAGE); wait(2000, C_SET, V_VOLTAGE); } // { else { // Fetch temperatures from Dallas sensors (non-blocking) sensors.requestTemperatures(); // Read in the battery voltage ReadBat(bat, batPct); // query conversion time and sleep until conversion completed conversionTime = sensors.millisToWaitForConversion(sensors.getResolution()); // sleep() call can be replaced by wait() call if node need to process incoming messages (or if node is repeater) sleep(conversionTime); // Read temperature and send to controller // Fetch temperature temperature = sensors.getTempCByIndex(0); Serial.println("temperature: "); Serial.println(temperature); // Only send data if temperature has changed and no error #if COMPARE_TEMP == 1 if (lastTemperature != temperature && temperature != -127.00 && temperature != 85.00) { #else if (temperature != -127.00 && temperature != 85.00) { #endif // Send in the new temperature // set(float value, uint8_t decimals) send(msg.set(temperature, 2)); // Save new temperatures for next compare lastTemperature=temperature; } // Send in the new battery level sendBatteryLevel(batPct); send(msgBatt.set(bat, 2)); // Save the battery level for next compare lastBat = bat; Serial.println("Sleep..."); sleep(SLEEP_TIME); } } void receive(const MyMessage &message) { if (message.isAck()) { Serial.println("This is an ack from gateway"); } if (message.type == V_TEMP) { if (!initialValTempSent) { Serial.println("Received initial temp value from controller"); initialValTempSent = true; } } else if (message.type == V_VOLTAGE) { if (!initialValBatSent) { Serial.println("Received initial bat value from controller"); initialValBatSent = true; } } if (initialValTempSent && initialValBatSent) initialValuesSent = true; } // b - battery voltage // bPct - battery percent void ReadBat(double& b, uint8_t& bPct) { long sumBat=0; int i; // take average over 64 readings for (i = 0; i < 64; ++i) { // read & sum battery voltage sumBat += analogRead(BAT_V); } sumBat = sumBat >> 6; // shift 6 -> divide by 64 b = sumBat*3.3/1023.0; bPct = (uint8_t)(sumBat*100.0/1023.0); } Here is the serial gateway sketch: #include <SoftwareSerial.h> SoftwareSerial softSerial(8, 9); // RX, TX // Enable debug prints to serial monitor #define MY_DEBUG #define MY_DEBUGDEVICE softSerial // You also need to create softSerial in setup() // Enable and select radio type attached //#define MY_RADIO_RF24 //#define MY_RADIO_NRF5_ESB //#define MY_RADIO_RFM95 #define MY_RADIO_RFM69 #define MY_IS_RFM69HW #define MY_RFM69_FREQUENCY RFM69_915MHZ // Set LOW transmit power level as default, if you have an amplified NRF-module and // power your radio separately with a good regulator you can turn up PA level. //#define MY_RF24_PA_LEVEL RF24_PA_LOW // Enable serial gateway #define MY_GATEWAY_SERIAL // Define a lower baud rate for Arduinos running on 8 MHz (Arduino Pro Mini 3.3V & SenseBender) #if F_CPU == 8000000L #define MY_BAUD_RATE 38400 #endif // Enable inclusion mode #define MY_INCLUSION_MODE_FEATURE // Enable Inclusion mode button on gateway //#define MY_INCLUSION_BUTTON_FEATURE // Inverses behavior of inclusion button (if using external pullup) //#define MY_INCLUSION_BUTTON_EXTERNAL_PULLUP // Set inclusion mode duration (in seconds) #define MY_INCLUSION_MODE_DURATION 60 // Digital pin used for inclusion mode button //#define MY_INCLUSION_MODE_BUTTON_PIN 3 // Set blinking period #define MY_DEFAULT_LED_BLINK_PERIOD 300 // Inverses the behavior of leds //#define MY_WITH_LEDS_BLINKING_INVERSE // Flash leds on rx/tx/err // Uncomment to override default HW configurations //#define MY_DEFAULT_ERR_LED_PIN 4 // Error led pin //#define MY_DEFAULT_RX_LED_PIN 6 // Receive led pin //#define MY_DEFAULT_TX_LED_PIN 5 // the PCB, on board LED #include <MySensors.h> void setup() { softSerial.begin(38400); } void presentation() { // Present locally attached sensors } void loop() { // Send locally attached sensor data here }