Skip to content

StarGate01/smartpump-firmware

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

smartpump-firmware

Firmware for an off-grid water pumping system

Hardware overview

Development setup

Install Visual Studio Code and the PlatformIO extension.

Copy include/NetworkConfiguration.h.example to include/NetworkConfiguration.h and insert your The Things Network configuration.

Edit the platformio.ini file and change the board_build.arduino.lorawan.region to the correct frequency band for your country.

Attach a serial monitor and read the Device EUI after a reset. Then set the device EUI in the TTN console, use OTAA and MAC 1.0.2 .

Use the PlatformIO menu to compile and upload the code.

TTN configuration

Uplink Payload Formatter

function decodeInt16(bytes, offset)
{
  return (((bytes[offset + 1] & 0xFF) << 8) | (bytes[offset] & 0xFF));
}

function decodeFloat32(bytes, offset)
{
  var d = new DataView(new ArrayBuffer(4));
  for(var i=0; i<4; i++) d.setUint8(i, bytes[offset + i]);
  return d.getFloat32(0, true);
}

function decodeUplink(input) 
{
  return {
    data: {
      bytes: input.bytes,
      id: input.bytes[0],
      current: [
        decodeFloat32(input.bytes, 1),
        decodeFloat32(input.bytes, 5),
        decodeFloat32(input.bytes, 9),
        decodeFloat32(input.bytes, 13)
      ],
      adc: [
        decodeFloat32(input.bytes, 17),
        decodeFloat32(input.bytes, 21),
        decodeFloat32(input.bytes, 25),
        decodeFloat32(input.bytes, 29)
      ]
    },
    warnings: [],
    errors: []
  };
}

Downlink Payload Formatter

function encodeDownlink(input) {
  var rel = 0;
  if(input.data.relay[0] === true) rel |= 1;
  if(input.data.relay[1] === true) rel |= 2;
  if(input.data.relay[2] === true) rel |= 4;
  if(input.data.relay[3] === true) rel |= 8;
  return {
    bytes: [ rel ],
    fPort: 1,
    warnings: [],
    errors: []
  };
}

function decodeDownlink(input) {
  return {
    data: {
      bytes: input.bytes,
      relay: [
        input.bytes[0] & 1, 
        input.bytes[0] & 2,
        input.bytes[0] & 4,
        input.bytes[0] & 8
      ]
    },
    warnings: [],
    errors: []
  };
}

Example uplink payload

{
  "id": 1,
  "current": [1.0, 1.0, 1.0, 1.0],
  "adc": [1.0, 1.0, 1.0, 1.0]
}

Example downlink payload

{
  "relay": [true, true, true, true]
}

About

Firmware for an off-grid water pumping system

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages