- Arduino compatible Uno R3
Arduino compatiable Ethernet Shield W5100
15 PSI pressure sensor
USB Wall Charger
Network Switch
- The USB Charger was laying around and everything else was easily found on a eBay.
Libraries: (My copies of the oringals are at https://github.com/cajeeper/Arduino)
- Agentuino - https://github.com/1sw/Agentuino
- Requires
-
MemoryFree - https://github.com/maniacbug/MemoryFree
Streaming - http://arduiniana.org/libraries/streaming/
My Arduino Sketch - A modification of the example Agentuino sketch:
/**
* SNMP Sensor Input Sketch v.2
* Justin Bennett http://justin-bennett-msjc.blogspot.com/
*
*
* Adapted from the Agentuino SNMP Example Sketch:
* Agentuino SNMP Agent Library Prototyping...
*
* Copyright 2010 Eric C. Gionet <lavco_eg@hotmail.com>
*
*/
#include <Streaming.h> // Include the Streaming library
#include <Ethernet.h> // Include the Ethernet library
#include <SPI.h>
#include <MemoryFree.h>
#include <Agentuino.h>
//#include <Flash.h>
//
//
#define DEBUG
//
static byte mac[] = { 0xAA, 0xAA, 0xBB, 0xBB, 0x00, 0x01 };
static byte ip[] = { 192, 168, 0, 10 };
static byte gateway[] = { 192, 168, 0, 1 };
static byte subnet[] = { 255, 255, 255, 0 };
//
//
// tkmib - linux mib browser
//
// RFC1213-MIB OIDs
// .iso (.1)
// .iso.org (.1.3)
// .iso.org.dod (.1.3.6)
// .iso.org.dod.internet (.1.3.6.1)
// .iso.org.dod.internet.mgmt (.1.3.6.1.2)
// .iso.org.dod.internet.mgmt.mib-2 (.1.3.6.1.2.1)
// .iso.org.dod.internet.mgmt.mib-2.system (.1.3.6.1.2.1.1)
// .iso.org.dod.internet.mgmt.mib-2.system.sysDescr (.1.3.6.1.2.1.1.1)
const static char sysDescr[] PROGMEM = "1.3.6.1.2.1.1.1.0"; // read-only (DisplayString)
// .iso.org.dod.internet.mgmt.mib-2.system.sysObjectID (.1.3.6.1.2.1.1.2)
const static char sysObjectID[] PROGMEM = "1.3.6.1.2.1.1.2.0"; // read-only (ObjectIdentifier)
// .iso.org.dod.internet.mgmt.mib-2.system.sysUpTime (.1.3.6.1.2.1.1.3)
const static char sysUpTime[] PROGMEM = "1.3.6.1.2.1.1.3.0"; // read-only (TimeTicks)
// .iso.org.dod.internet.mgmt.mib-2.system.sysContact (.1.3.6.1.2.1.1.4)
const static char sysContact[] PROGMEM = "1.3.6.1.2.1.1.4.0"; // read-write (DisplayString)
// .iso.org.dod.internet.mgmt.mib-2.system.sysName (.1.3.6.1.2.1.1.5)
const static char sysName[] PROGMEM = "1.3.6.1.2.1.1.5.0"; // read-write (DisplayString)
// .iso.org.dod.internet.mgmt.mib-2.system.sysLocation (.1.3.6.1.2.1.1.6)
const static char sysLocation[] PROGMEM = "1.3.6.1.2.1.1.6.0"; // read-write (DisplayString)
// .iso.org.dod.internet.mgmt.mib-2.system.sysServices (.1.3.6.1.2.1.1.7)
const static char sysServices[] PROGMEM = "1.3.6.1.2.1.1.7.0"; // read-only (Integer)
//
// Arduino defined OIDs
// .iso.org.dod.internet.private (.1.3.6.1.4)
// .iso.org.dod.internet.private.enterprises (.1.3.6.1.4.1)
// .iso.org.dod.internet.private.enterprises.arduino (.1.3.6.1.4.1.36582)
// .iso.org.dod.internet.private.enterprises.arduino.RAW (.1.3.6.1.4.1.36582.0.0)
const static char RAWa0[] PROGMEM = "1.3.6.1.4.1.36582.0.0"; // read-only (Integer)
// .iso.org.dod.internet.private.enterprises.arduino.RAW (.1.3.6.1.4.1.36582.0.1)
const static char RAWa1[] PROGMEM = "1.3.6.1.4.1.36582.0.1"; // read-only (Integer)
// .iso.org.dod.internet.private.enterprises.arduino.RAW (.1.3.6.1.4.1.36582.0.2)
const static char RAWa2[] PROGMEM = "1.3.6.1.4.1.36582.0.2"; // read-only (Integer)
// .iso.org.dod.internet.private.enterprises.arduino.RAW (.1.3.6.1.4.1.36582.0.3)
const static char RAWa3[] PROGMEM = "1.3.6.1.4.1.36582.0.3"; // read-only (Integer)
// .iso.org.dod.internet.private.enterprises.arduino.RAW (.1.3.6.1.4.1.36582.0.4)
//const static char RAWa4[] PROGMEM = "1.3.6.1.4.1.36582.0.4"; // read-only (Integer)
// .iso.org.dod.internet.private.enterprises.arduino.RAW (.1.3.6.1.4.1.36582.0.5)
const static char RAWa5[] PROGMEM = "1.3.6.1.4.1.36582.0.5"; // read-only (Integer)
// .iso.org.dod.internet.private.enterprises.arduino.RAW (.1.3.6.1.4.1.36582.1.0)
//const static char RAWd0[] PROGMEM = "1.3.6.1.4.1.36582.1.0"; // read-only (Integer)
// .iso.org.dod.internet.private.enterprises.arduino.RAW (.1.3.6.1.4.1.36582.1.1)
//const static char RAWd1[] PROGMEM = "1.3.6.1.4.1.36582.1.1"; // read-only (Integer)
// .iso.org.dod.internet.private.enterprises.arduino.RAW (.1.3.6.1.4.1.36582.1.2)
const static char RAWd2[] PROGMEM = "1.3.6.1.4.1.36582.1.2"; // read-only (Integer)
// .iso.org.dod.internet.private.enterprises.arduino.RAW (.1.3.6.1.4.1.36582.1.3)
const static char RAWd3[] PROGMEM = "1.3.6.1.4.1.36582.1.3"; // read-only (Integer)
// .iso.org.dod.internet.private.enterprises.arduino.RAW (.1.3.6.1.4.1.36582.1.4)
const static char RAWd4[] PROGMEM = "1.3.6.1.4.1.36582.1.4"; // read-only (Integer)
// .iso.org.dod.internet.private.enterprises.arduino.RAW (.1.3.6.1.4.1.36582.1.5)
const static char RAWd5[] PROGMEM = "1.3.6.1.4.1.36582.1.5"; // read-only (Integer)
// .iso.org.dod.internet.private.enterprises.arduino.RAW (.1.3.6.1.4.1.36582.1.6)
const static char RAWd6[] PROGMEM = "1.3.6.1.4.1.36582.1.6"; // read-only (Integer)
// .iso.org.dod.internet.private.enterprises.arduino.RAW (.1.3.6.1.4.1.36582.1.7)
const static char RAWd7[] PROGMEM = "1.3.6.1.4.1.36582.1.7"; // read-only (Integer)
// .iso.org.dod.internet.private.enterprises.arduino.RAW (.1.3.6.1.4.1.36582.1.8)
const static char RAWd8[] PROGMEM = "1.3.6.1.4.1.36582.1.8"; // read-only (Integer)
// .iso.org.dod.internet.private.enterprises.arduino.RAW (.1.3.6.1.4.1.36582.1.9)
const static char RAWd9[] PROGMEM = "1.3.6.1.4.1.36582.1.9"; // read-only (Integer)
// .iso.org.dod.internet.private.enterprises.arduino.RAW (.1.3.6.1.4.1.36582.1.10)
//const static char RAWd10[] PROGMEM = "1.3.6.1.4.1.36582.1.10"; // read-only (Integer)
// .iso.org.dod.internet.private.enterprises.arduino.RAW (.1.3.6.1.4.1.36582.1.11)
//const static char RAWd11[] PROGMEM = "1.3.6.1.4.1.36582.1.11"; // read-only (Integer)
// .iso.org.dod.internet.private.enterprises.arduino.RAW (.1.3.6.1.4.1.36582.1.12)
//const static char RAWd12[] PROGMEM = "1.3.6.1.4.1.36582.1.12"; // read-only (Integer)
// .iso.org.dod.internet.private.enterprises.arduino.RAW (.1.3.6.1.4.1.36582.1.13)
//const static char RAWd13[] PROGMEM = "1.3.6.1.4.1.36582.1.13"; // read-only (Integer)
//
//
// RFC1213 local values
static char locDescr[] = "Agentuino, a light-weight SNMP Agent."; // read-only (static)
static char locObjectID[] = "1.3.6.1.3.2009.0"; // read-only (static)
static uint32_t locUpTime = 0; // read-only (static)
static char locContact[20] = ""; // should be stored/read from EEPROM - read/write (not done for simplicity)
static char locName[20] = "Sensor"; // should be stored/read from EEPROM - read/write (not done for simplicity)
static char locLocation[20] = ""; // should be stored/read from EEPROM - read/write (not done for simplicity)
static int32_t locServices = 7; // read-only (static)
uint32_t prevMillis = millis();
char oid[SNMP_MAX_OID_LEN];
SNMP_API_STAT_CODES api_status;
SNMP_ERR_CODES status;
void pduReceived()
{
SNMP_PDU pdu;
//
#ifdef DEBUG
Serial << F("UDP Packet Received Start..") << F(" RAM:") << freeMemory() << endl;
#endif
//
api_status = Agentuino.requestPdu(&pdu);
//
if ( pdu.type == SNMP_PDU_GET || pdu.type == SNMP_PDU_GET_NEXT || pdu.type == SNMP_PDU_SET
&& pdu.error == SNMP_ERR_NO_ERROR && api_status == SNMP_API_STAT_SUCCESS ) {
//
pdu.OID.toString(oid);
//
//Serial << "OID: " << oid << endl;
//
if ( strcmp_P(oid, sysDescr ) == 0 ) {
// handle sysDescr (set/get) requests
if ( pdu.type == SNMP_PDU_SET ) {
// response packet from set-request - object is read-only
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = SNMP_ERR_READ_ONLY;
} else {
// response packet from get-request - locDescr
status = pdu.VALUE.encode(SNMP_SYNTAX_OCTETS, locDescr);
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = status;
}
//
#ifdef DEBUG
Serial << F("sysDescr...") << locDescr << F(" ") << pdu.VALUE.size << endl;
#endif
} else if ( strcmp_P(oid, sysUpTime ) == 0 ) {
// handle sysName (set/get) requests
if ( pdu.type == SNMP_PDU_SET ) {
// response packet from set-request - object is read-only
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = SNMP_ERR_READ_ONLY;
} else {
// response packet from get-request - locUpTime
status = pdu.VALUE.encode(SNMP_SYNTAX_TIME_TICKS, locUpTime);
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = status;
}
//
#ifdef DEBUG
Serial << F("sysUpTime...") << locUpTime << F(" ") << pdu.VALUE.size << endl;
#endif
} else if ( strcmp_P(oid, sysName ) == 0 ) {
// handle sysName (set/get) requests
if ( pdu.type == SNMP_PDU_SET ) {
// response packet from set-request - object is read/write
status = pdu.VALUE.decode(locName, strlen(locName));
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = status;
} else {
// response packet from get-request - locName
status = pdu.VALUE.encode(SNMP_SYNTAX_OCTETS, locName);
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = status;
}
//
#ifdef DEBUG
Serial << F("sysName...") << locName << F(" ") << pdu.VALUE.size << endl;
#endif
} else if ( strcmp_P(oid, sysContact ) == 0 ) {
// handle sysContact (set/get) requests
if ( pdu.type == SNMP_PDU_SET ) {
// response packet from set-request - object is read/write
status = pdu.VALUE.decode(locContact, strlen(locContact));
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = status;
} else {
// response packet from get-request - locContact
status = pdu.VALUE.encode(SNMP_SYNTAX_OCTETS, locContact);
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = status;
}
//
#ifdef DEBUG
Serial << F("sysContact...") << locContact << F(" ") << pdu.VALUE.size << endl;
#endif
} else if ( strcmp_P(oid, sysLocation ) == 0 ) {
// handle sysLocation (set/get) requests
if ( pdu.type == SNMP_PDU_SET ) {
// response packet from set-request - object is read/write
status = pdu.VALUE.decode(locLocation, strlen(locLocation));
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = status;
} else {
// response packet from get-request - locLocation
status = pdu.VALUE.encode(SNMP_SYNTAX_OCTETS, locLocation);
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = status;
}
//
#ifdef DEBUG
Serial << F("sysLocation...") << locLocation << F(" ") << pdu.VALUE.size << endl;
#endif
} else if ( strcmp_P(oid, sysServices) == 0 ) {
// handle sysServices (set/get) requests
if ( pdu.type == SNMP_PDU_SET ) {
// response packet from set-request - object is read-only
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = SNMP_ERR_READ_ONLY;
} else {
// response packet from get-request - locServices
status = pdu.VALUE.encode(SNMP_SYNTAX_INT, locServices);
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = status;
}
//
#ifdef DEBUG
Serial << F("locServices...") << locServices << F(" ") << pdu.VALUE.size << endl;
#endif
} else if ( strcmp_P(oid, RAWa0) == 0 ) {
int rawReading = 0;
// handle RAW (set/get) requests
if ( pdu.type == SNMP_PDU_SET ) {
// response packet from set-request - object is read-only
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = SNMP_ERR_READ_ONLY;
} else {
// response packet from get-request - RAW
rawReading = analogRead(A0); // Range : 0..1024
status = pdu.VALUE.encode(SNMP_SYNTAX_INT, rawReading);
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = status;
}
//
#ifdef DEBUG
Serial << F("RAWa0...") << rawReading << F(" ") << pdu.VALUE.size << endl;
#endif
} else if ( strcmp_P(oid, RAWa1) == 0 ) {
int rawReading = 0;
// handle RAW (set/get) requests
if ( pdu.type == SNMP_PDU_SET ) {
// response packet from set-request - object is read-only
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = SNMP_ERR_READ_ONLY;
} else {
// response packet from get-request - RAW
rawReading = analogRead(A1); // Range : 0..1024
status = pdu.VALUE.encode(SNMP_SYNTAX_INT, rawReading);
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = status;
}
//
#ifdef DEBUG
Serial << F("RAW...") << rawReading << F(" ") << pdu.VALUE.size << endl;
#endif
} else if ( strcmp_P(oid, RAWa2) == 0 ) {
int rawReading = 0;
// handle RAW (set/get) requests
if ( pdu.type == SNMP_PDU_SET ) {
// response packet from set-request - object is read-only
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = SNMP_ERR_READ_ONLY;
} else {
// response packet from get-request - RAW
rawReading = analogRead(A2); // Range : 0..1024
status = pdu.VALUE.encode(SNMP_SYNTAX_INT, rawReading);
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = status;
}
//
#ifdef DEBUG
Serial << F("RAWa2...") << rawReading << F(" ") << pdu.VALUE.size << endl;
#endif
} else if ( strcmp_P(oid, RAWa3) == 0 ) {
int rawReading = 0;
// handle RAW (set/get) requests
if ( pdu.type == SNMP_PDU_SET ) {
// response packet from set-request - object is read-only
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = SNMP_ERR_READ_ONLY;
} else {
// response packet from get-request - RAW
rawReading = analogRead(A3); // Range : 0..1024
status = pdu.VALUE.encode(SNMP_SYNTAX_INT, rawReading);
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = status;
}
//
#ifdef DEBUG
Serial << F("RAWa3...") << rawReading << F(" ") << pdu.VALUE.size << endl;
#endif
// } else if ( strcmp_P(oid, RAWa4) == 0 ) {
// int rawReading = 0;
// // handle RAW (set/get) requests
// if ( pdu.type == SNMP_PDU_SET ) {
// // response packet from set-request - object is read-only
// pdu.type = SNMP_PDU_RESPONSE;
// pdu.error = SNMP_ERR_READ_ONLY;
// } else {
// // response packet from get-request - RAW
// rawReading = analogRead(A4); // Range : 0..1024
// status = pdu.VALUE.encode(SNMP_SYNTAX_INT, rawReading);
// pdu.type = SNMP_PDU_RESPONSE;
// pdu.error = status;
// }
// //
// #ifdef DEBUG
// Serial << F("RAWa4...") << rawReading << F(" ") << pdu.VALUE.size << endl;
// #endif
} else if ( strcmp_P(oid, RAWa5) == 0 ) {
int rawReading = 0;
// handle RAW (set/get) requests
if ( pdu.type == SNMP_PDU_SET ) {
// response packet from set-request - object is read-only
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = SNMP_ERR_READ_ONLY;
} else {
// response packet from get-request - RAW
rawReading = analogRead(A5); // Range : 0..1024
status = pdu.VALUE.encode(SNMP_SYNTAX_INT, rawReading);
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = status;
}
//
#ifdef DEBUG
Serial << F("RAWa5...") << rawReading << F(" ") << pdu.VALUE.size << endl;
#endif
// } else if ( strcmp_P(oid, RAWd0) == 0 ) {
// int rawReading = 0;
// // handle RAW (set/get) requests
// if ( pdu.type == SNMP_PDU_SET ) {
// // response packet from set-request - object is read-only
// pdu.type = SNMP_PDU_RESPONSE;
// pdu.error = SNMP_ERR_READ_ONLY;
// } else {
// // response packet from get-request - RAW
// if (digitalRead(0) == LOW) {
// rawReading = 1; // Range : 0..1
// }
// status = pdu.VALUE.encode(SNMP_SYNTAX_INT, rawReading);
// pdu.type = SNMP_PDU_RESPONSE;
// pdu.error = status;
// }
// //
// #ifdef DEBUG
// Serial << F("RAWd0...") << rawReading << F(" ") << pdu.VALUE.size << endl;
// #endif
// } else if ( strcmp_P(oid, RAWd1) == 0 ) {
// int rawReading = 0;
// // handle RAW (set/get) requests
// if ( pdu.type == SNMP_PDU_SET ) {
// // response packet from set-request - object is read-only
// pdu.type = SNMP_PDU_RESPONSE;
// pdu.error = SNMP_ERR_READ_ONLY;
// } else {
// // response packet from get-request - RAW
// if (digitalRead(1) == LOW) {
// rawReading = 1; // Range : 0..1
// } status = pdu.VALUE.encode(SNMP_SYNTAX_INT, rawReading);
// pdu.type = SNMP_PDU_RESPONSE;
// pdu.error = status;
// }
// //
// #ifdef DEBUG
// Serial << F("RAWd1...") << rawReading << F(" ") << pdu.VALUE.size << endl;
// #endif
} else if ( strcmp_P(oid, RAWd2) == 0 ) {
int rawReading = 0;
// handle RAW (set/get) requests
if ( pdu.type == SNMP_PDU_SET ) {
// response packet from set-request - object is read-only
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = SNMP_ERR_READ_ONLY;
} else {
// response packet from get-request - RAW
if (digitalRead(2) == LOW) {
rawReading = 1; // Range : 0..1
}
status = pdu.VALUE.encode(SNMP_SYNTAX_INT, rawReading);
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = status;
}
//
#ifdef DEBUG
Serial << F("RAWd2...") << rawReading << F(" ") << pdu.VALUE.size << endl;
#endif
} else if ( strcmp_P(oid, RAWd3) == 0 ) {
int rawReading = 0;
// handle RAW (set/get) requests
if ( pdu.type == SNMP_PDU_SET ) {
// response packet from set-request - object is read-only
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = SNMP_ERR_READ_ONLY;
} else {
// response packet from get-request - RAW
if (digitalRead(3) == LOW) {
rawReading = 1; // Range : 0..1
}
status = pdu.VALUE.encode(SNMP_SYNTAX_INT, rawReading);
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = status;
}
//
#ifdef DEBUG
Serial << F("RAWd3...") << rawReading << F(" ") << pdu.VALUE.size << endl;
#endif
} else if ( strcmp_P(oid, RAWd4) == 0 ) {
int rawReading = 0;
// handle RAW (set/get) requests
if ( pdu.type == SNMP_PDU_SET ) {
// response packet from set-request - object is read-only
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = SNMP_ERR_READ_ONLY;
} else {
// response packet from get-request - RAW
if (digitalRead(4) == LOW) {
rawReading = 1; // Range : 0..1
}
status = pdu.VALUE.encode(SNMP_SYNTAX_INT, rawReading);
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = status;
}
//
#ifdef DEBUG
Serial << F("RAWd4...") << rawReading << F(" ") << pdu.VALUE.size << endl;
#endif
} else if ( strcmp_P(oid, RAWd5) == 0 ) {
int rawReading = 0;
// handle RAW (set/get) requests
if ( pdu.type == SNMP_PDU_SET ) {
// response packet from set-request - object is read-only
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = SNMP_ERR_READ_ONLY;
} else {
// response packet from get-request - RAW
if (digitalRead(5) == LOW) {
rawReading = 1; // Range : 0..1
}
status = pdu.VALUE.encode(SNMP_SYNTAX_INT, rawReading);
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = status;
}
//
#ifdef DEBUG
Serial << F("RAWd5...") << rawReading << F(" ") << pdu.VALUE.size << endl;
#endif
} else if ( strcmp_P(oid, RAWd6) == 0 ) {
int rawReading = 0;
// handle RAW (set/get) requests
if ( pdu.type == SNMP_PDU_SET ) {
// response packet from set-request - object is read-only
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = SNMP_ERR_READ_ONLY;
} else {
// response packet from get-request - RAW
if (digitalRead(6) == LOW) {
rawReading = 1; // Range : 0..1
}
status = pdu.VALUE.encode(SNMP_SYNTAX_INT, rawReading);
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = status;
}
//
#ifdef DEBUG
Serial << F("RAWd6...") << rawReading << F(" ") << pdu.VALUE.size << endl;
#endif
} else if ( strcmp_P(oid, RAWd7) == 0 ) {
int rawReading = 0;
// handle RAW (set/get) requests
if ( pdu.type == SNMP_PDU_SET ) {
// response packet from set-request - object is read-only
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = SNMP_ERR_READ_ONLY;
} else {
// response packet from get-request - RAW
if (digitalRead(7) == LOW) {
rawReading = 1; // Range : 0..1
}
status = pdu.VALUE.encode(SNMP_SYNTAX_INT, rawReading);
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = status;
}
//
#ifdef DEBUG
Serial << F("RAWd7...") << rawReading << F(" ") << pdu.VALUE.size << endl;
#endif
} else if ( strcmp_P(oid, RAWd8) == 0 ) {
int rawReading = 0;
// handle RAW (set/get) requests
if ( pdu.type == SNMP_PDU_SET ) {
// response packet from set-request - object is read-only
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = SNMP_ERR_READ_ONLY;
} else {
// response packet from get-request - RAW
if (digitalRead(8) == LOW) {
rawReading = 1; // Range : 0..1
}
status = pdu.VALUE.encode(SNMP_SYNTAX_INT, rawReading);
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = status;
}
//
#ifdef DEBUG
Serial << F("RAWd8...") << rawReading << F(" ") << pdu.VALUE.size << endl;
#endif
} else if ( strcmp_P(oid, RAWd9) == 0 ) {
int rawReading = 0;
// handle RAW (set/get) requests
if ( pdu.type == SNMP_PDU_SET ) {
// response packet from set-request - object is read-only
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = SNMP_ERR_READ_ONLY;
} else {
// response packet from get-request - RAW
if (digitalRead(9) == LOW) {
rawReading = 1; // Range : 0..1
}
status = pdu.VALUE.encode(SNMP_SYNTAX_INT, rawReading);
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = status;
}
//
#ifdef DEBUG
Serial << F("RAWd9...") << rawReading << F(" ") << pdu.VALUE.size << endl;
#endif
// } else if ( strcmp_P(oid, RAWd10) == 0 ) {
// int rawReading = 0;
// // handle RAW (set/get) requests
// if ( pdu.type == SNMP_PDU_SET ) {
// // response packet from set-request - object is read-only
// pdu.type = SNMP_PDU_RESPONSE;
// pdu.error = SNMP_ERR_READ_ONLY;
// } else {
// // response packet from get-request - RAW
// if (digitalRead(10) == LOW) {
// rawReading = 1; // Range : 0..1
// }
// status = pdu.VALUE.encode(SNMP_SYNTAX_INT, rawReading);
// pdu.type = SNMP_PDU_RESPONSE;
// pdu.error = status;
// }
// //
// #ifdef DEBUG
// Serial << F("RAWd10...") << rawReading << F(" ") << pdu.VALUE.size << endl;
// #endif
// } else if ( strcmp_P(oid, RAWd11) == 0 ) {
// int rawReading = 0;
// // handle RAW (set/get) requests
// if ( pdu.type == SNMP_PDU_SET ) {
// // response packet from set-request - object is read-only
// pdu.type = SNMP_PDU_RESPONSE;
// pdu.error = SNMP_ERR_READ_ONLY;
// } else {
// // response packet from get-request - RAW
// if (digitalRead(11) == LOW) {
// rawReading = 1; // Range : 0..1
// }
// status = pdu.VALUE.encode(SNMP_SYNTAX_INT, rawReading);
// pdu.type = SNMP_PDU_RESPONSE;
// pdu.error = status;
// }
// //
// #ifdef DEBUG
// Serial << F("RAWd11...") << rawReading << F(" ") << pdu.VALUE.size << endl;
// #endif
// } else if ( strcmp_P(oid, RAWd12) == 0 ) {
// int rawReading = 0;
// // handle RAW (set/get) requests
// if ( pdu.type == SNMP_PDU_SET ) {
// // response packet from set-request - object is read-only
// pdu.type = SNMP_PDU_RESPONSE;
// pdu.error = SNMP_ERR_READ_ONLY;
// } else {
// // response packet from get-request - RAW
// if (digitalRead(12) == LOW) {
// rawReading = 1; // Range : 0..1
// }
// status = pdu.VALUE.encode(SNMP_SYNTAX_INT, rawReading);
// pdu.type = SNMP_PDU_RESPONSE;
// pdu.error = status;
// }
// //
// #ifdef DEBUG
// Serial << F("RAWd12...") << rawReading << F(" ") << pdu.VALUE.size << endl;
// #endif
// } else if ( strcmp_P(oid, RAWd13) == 0 ) {
// int rawReading = 0;
// // handle RAW (set/get) requests
// if ( pdu.type == SNMP_PDU_SET ) {
// // response packet from set-request - object is read-only
// pdu.type = SNMP_PDU_RESPONSE;
// pdu.error = SNMP_ERR_READ_ONLY;
// } else {
// // response packet from get-request - RAW
// if (digitalRead(13) == LOW) {
// rawReading = 1; // Range : 0..1
// }
// status = pdu.VALUE.encode(SNMP_SYNTAX_INT, rawReading);
// pdu.type = SNMP_PDU_RESPONSE;
// pdu.error = status;
// }
// //
// #ifdef DEBUG
// Serial << F("RAWd13...") << rawReading << F(" ") << pdu.VALUE.size << endl;
// #endif
} else {
// oid does not exist
//
// response packet - object not found
pdu.type = SNMP_PDU_RESPONSE;
pdu.error = SNMP_ERR_NO_SUCH_NAME;
}
//
Agentuino.responsePdu(&pdu);
}
//
Agentuino.freePdu(&pdu);
//
//Serial << "UDP Packet Received End.." << " RAM:" << freeMemory() << endl;
}
void setup()
{
Serial.begin(9600);
Ethernet.begin(mac, ip);
//
//
pinMode(A1, INPUT);
pinMode(A0, INPUT);
pinMode(A2, INPUT);
pinMode(A3, INPUT);
// pinMode(A4, INPUT);
pinMode(A5, INPUT);
// pinMode(0, INPUT);
// pinMode(1, INPUT);
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(4, INPUT);
pinMode(5, INPUT);
pinMode(6, INPUT);
pinMode(7, INPUT);
pinMode(8, INPUT);
pinMode(9, INPUT);
// pinMode(10, INPUT);
// pinMode(11, INPUT);
// pinMode(12, INPUT);
// pinMode(13, INPUT);
//digitalWrite(0, HIGH);
//digitalWrite(1, HIGH);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
//digitalWrite(10, HIGH);
//digitalWrite(11, HIGH);
//digitalWrite(12, HIGH);
//digitalWrite(13, HIGH);
api_status = Agentuino.begin();
if ( api_status == SNMP_API_STAT_SUCCESS ) {
//
Agentuino.onPduReceive(pduReceived);
//
delay(10);
//
Serial << F("SNMP Agent Initalized...") << endl;
//
return;
}
//
delay(10);
//
Serial << F("SNMP Agent Initalization Problem...") << status << endl;
}
void loop()
{
// listen/handle for incoming SNMP requests
Agentuino.listen();
//
// sysUpTime - The time (in hundredths of a second) since
// the network management portion of the system was last
// re-initialized.
if ( millis() - prevMillis > 1000 ) {
// increment previous milliseconds
prevMillis += 1000;
//
// increment up-time counter
locUpTime += 100;
}
}
Formatted for web with http://codeformatter.blogspot.com/
With this sketch, the pin inputs I can read are:
Analog 0, 1, 2, 3, 5 - Values returned - integer 0 - 1024 (0 - 5V Input)
Digital 2, 3, 4, 5, 6, 7, 8, 9 - Values returned - integer 0 (Open to GND) or 1 (Closed to GND)
I'm only using analog pin 1 to read in my 15 PSI sensor. At first, I was doing all the math on the Arduino, but it made it less flexible, so I've moved all my math and formulas for water - Analog input to Volts, PSI to inch/feet of water, and height of water to gallons based on tank shape and size - into PowerShell.
To read the sensor, you apply 5V power and ground from the Arduino to it and measure the signal input as 0 - 1024 input.
I noticed the math wasn't working out when I checked the actual inches of water versus what my sensor was reporting. The biggest variable appears to be the input voltage from your power source. I have found some USB wall adapters vary as much as 4.55 - 4.98 VDC. So, be sure to take the actual reference voltage before finalizing your formulas on reading in from analog pins.
I'll share my PowerShell function's details - which makes this easy to adjust reference voltage input - in Part 4.