====== Anpassung des Contiki SNMP zur Verwendung auf den Modulen von Adaptive Network Solutions ======
Contiki SNMP (siehe [[contiki:snmp|SNMP auf Contiki 2.5 und Contiki 2.6]]) wurde so angepasst dass nun folgende Features auf den Modulen zur Verfügung stehen:
* Betriebszustandsanzeige über LED DS3
* Paketempfangssignalisierung über LED DS2
* Port Pin Steuerung über SNMPv3 über LED DS1
* Messung der Versorgungsspannung über ADC0 bei Anschluss eines 1:1 Spannungsteilers über die Versorgungsspannung
-> Pinbelegung und Schaltplan der Module siehe: {{:contiki:a-n-solutions-module:brick_mcu_pinassignments_ref2.pdf|}}
===== Betriebszustandsanzeige über LED DS3 =====
Zur Signalisierung der Betriebszustandsanzeige wurden innerhalb des Contiki SNMP Prozesses (snmpd.c) zuerst alle LEDs als Ausgänge geschaltet, anschließend LED DS3 (PIN7) auf LOW geschaltet und somit aktiviert.
#include
/*Switch LED on @ANY Brick On if SNMPD started and set other LEDs as Output*/
DDRB |= (1 << PIN5);
DDRB |= (1 << PIN6);
DDRB |= (1 << PIN7);
PORTB &= ~(1 << PIN7);
PORTB |= (1 << PIN6);
PORTB |= (1 << PIN5);
/*END LED @ANY Brick*/
===== Paketempfangssignalisierung über LED DS2 =====
Um das Eintreffen eines Pakets über uIPv6 visualisieren zu können, wurde die LED DS2 innerhalb der Funktion ''tcpip_input(void)'' innerhalb der Datei tcpip.c im Verzeichnis ''/core/net/'' angepasst.
/*---------------------------------------------------------------------------*/
void
tcpip_input(void)
{
/*sz*/
/*Blinking LED on packet receiving*/
PORTB &= ~(1 << PIN6);
/*sz*/
process_post_synch(&tcpip_process, PACKET_INPUT, NULL);
uip_len = 0;
#if UIP_CONF_IPV6
uip_ext_len = 0;
#endif /*UIP_CONF_IPV6*/
/*sz*/
/*Blinking LED on packet receiving*/
PORTB |= (1 << PIN6);
/*sz*/
}
/*---------------------------------------------------------------------------*/
===== Pin Steuerung über SNMPv3 über LED DS1 =====
Zur Steuerung von LED DS2 wurden die GET und SET Funktionen innerhalb der Datei ''mib-init-beuth-zig.c'' des SNMP Daemons angepasst.
/* LED DS1 for @ANY module start */
/** \brief LED DS1 for @ANY module get function*/
s8t getBeuthState(mib_object_t* object, u8t* oid, u8t len)
{
object->varbind.value.i_value = !((PORTB >> PIN5) & 1);
return 0;
}
/** \brief set LED DS1 for @ANY module*/
s8t setBeuthState(mib_object_t* object, u8t* oid, u8t len, varbind_value_t value)
{
if (value.i_value == 1) {
PORTB &= ~(1 << PIN5);
} else {
PORTB |= (1 << PIN5);
}
return 0;
}
/* LED DS1 for @ANY module end */
===== Messung der Versorgungsspannung über ADC0 bei Anschluss eines 1:1 Spannungsteilers über die Versorgungsspannung =====
Zur Messung der Versorgungsspannung wurde der PIN des ADC0 mit einem Spannungsteiler beschaltet.
{{:contiki:a-n-solutions-module:adc_batt.jpg?450|}}
Als Referenzspannung wurden die stabilen intern verfügbaren 2,54V des Mikrocontrollers verwendet. Zur Initialisierung des ADCs sowie zur Abfrage des aktuellen Wertes sind die folgenden Funktionen innerhalb der Datei ''mib-init-beuth-zig.c'' notwendig.
/* battery power level*/
/************************/
/** \brief function for initialization of the adc*/
void adc_init()
{
// AREF = AVcc
ADMUX = (1<varbind.value.i_value = batt_level;
return 0;
}
/*Battery Level end*/
===== Download und Kompilierung =====
Der komplette Quellcode kann hier heruntergeladen werden: {{:contiki:a-n-solutions-module:atany-snmp.zip|}}. Nach dem Entpacken sind folgende Kopiervorgänge nötig.
- Der Ordner ''snmp'' muss in das Verzeichnis ''/examples/'' kopiert werden.
- Der Ordner ''snmpd'' muss in das Verzeichnis ''apps'' kopiert werden.
- Der Ordner ''avr-zigbit'' muss in das Verzeichnis ''platforms'' kopiert werden.
- Die Datei ''tcpip.c'' muss in das Verzeichnis ''/core/net/'' kopiert werden.
Der Kompilierungsvorgang wird anschließend innerhalb des Ordners ''/examples/snmp/'' mit dem Befehl ''make zigbit'' gestartet. Im Anschluß kann die neu erstellte Datei ''snmp-server.elf'' auf das @ANY Modul geladen werden.
__Hinweise:__
* Innerhalb des Makefiles kann die MAC Adresse über die Compilerflags ''MAC_CONF_FREQUENCY'' und ''MAC_CONF_NUMBER'' angepasst werden. Gedacht ist hierbei ''MAC_CONF_FREQUENCY=0x09'' für 900MHz und ''DMAC_CONF_FREQUENCY=0x24'' für 2,4GHz. Über ''MAC_CONF_NUMBER'' kann die Knotennummer verändert werden.
#CFLAGS+= -DMAC_CONF_FREQUENCY=0x09 #900MHz
CFLAGS+= -DMAC_CONF_FREQUENCY=0x24 #2400MHz
CFLAGS+= -DMAC_CONF_NUMBER=0x02
* Standardmäßig werden alle Knoten als Router konfiguriert um somit vermaschtes Routing verwenden zu können, dies ist über das Flag ''UIP_CONF_ROUTER'' innerhalb des Makefiles einstellbar.
* Die Verwendung von Contiki SNMP ist in [[https://wiki.ipv6lab.beuth-hochschule.de/contiki/snmp_contiki_25_install#test_der_implementierung|Benutzung von Contiki SNMP]] beschrieben.