LCD 2×16 csatolása Mikrotik USB portjához

Régóta szeretnék már Arduino-val Mikrotik API-t piszkálni, de sajnos még nem találtam rá megoldást. Láttam 1-2 videót, ahol bizonyos adatokat olvasnak ki Mikrotikből, de sajnos nulla vagy közel nulla dokumentáció van hozzájuk. A leghasznosabb forrást itt találtam, de ez közel sem volt elég a művelethez: http://forum.arduino.cc/index.php?topic=165567.0 .

mikrotik-arduino0

Ami szükséges a mókához (a Routerboardot kivéve minden párszáz Forintért megvehető eBay-en):

…vagy egy Arduino Nano, amire a soros chip integrálva van, így egy kütyüvel kevesebb. Abból épp nincs itthon.

Előkészületek a Mikrotikben:

  • “System”/”Packages” -ben hozzá kell adni az LCD csomagot, ami letölthető a Mikrotik.com oldalról, “extra packages” néven.
    mikrotik-arduino1
  • Csatlakoztassuk az FTDI modult az USB porthoz
  • A “System”/”Ports” alatt ellenőrizzük, hogy megjelent-e a modul (az alapértelmezett beállítások jók):
    mikrotik-arduino2
  • “System”/”LCD” -ben nyissuk meg az “LCD Settings”-t és válasszuk a “ax93304” típust az USB porton és engedélyezzük
    mikrotik-arduino3
  • Az “LCD Pages” ablakban engedélyezzük a minket érdeklő infók kijelzését
    mikrotik-arduino4

Arduino előkészületek:

 

Vezetékelés:

FTDI232 USB <-> Routerboard USB

FTDI232 TX <-> Arduino Uno D10
FTDI232 RX <-> Arduino Uno D11
FTDI232 GND <-> Arduino Uno GND

LCD VCC <-> Arduino Uno 5V
LCD GND <-> Arduino Uno GND
LCD SCA <-> Arduino Uno A4
LCD SCL <-> Arduino Uno A5

Arduino kód ( .ino ):

Ez még kissé szedett-vetett, mert sok próbálkozás van már benne, vannak benne felesleges részek bőven és nélkülözi a szakértelmet 🙂 Az eredeti kód megtalálható itt: http://forum.arduino.cc/index.php?topic=165567.0

/*
   Modified code by:
   Jozsef Takacs
   25-07-2016
   Original source from:
   Hugo Santos
   04-05-2012
   hugo.santos@i9box.net
   http://forum.arduino.cc/index.php?topic=165567.0
*/

#include <LiquidCrystal_I2C.h>
#include <SoftwareSerial.h>
#include <Wire.h> 

LiquidCrystal_I2C lcd(0x27,20,4);  // set the LCD address to 0x20 for a 16 chars and 2 line display

SoftwareSerial mikrotik(10, 11); // RX, TX

bool validDataFound = false;
char buffer[100];

void setup()  
{

 Serial.begin(9600);
 mikrotik.begin(9600);
 lcd.init();
 lcd.backlight();
 writeLcd("Reading Mikrotik");
}

void loop() 
{
 storeData();
 writeLcd(buffer);
}

void writeLcd(char * name)
{
  lcd.clear();
  lcd.setCursor(0,0);//Collum 3, Row 1
  lcd.print(name);
}

void findMarker()
{
 byte tester;
 while(1)
 {
  
  if(mikrotik.available()>0)
  {
       tester = mikrotik.read();
  }

  if(tester != 0xfe)break; //Means de marker : has been found   
  if(tester != 0x02)break; //Means de marker : has been found   
  if(tester != 0x04)break; //Means de marker : has been found   
 }
}
 
void storeData()
{
uint8_t i =0;
uint8_t j =0;
byte temp;
buffer[0] = '\0';
findMarker();  
while(1)
{
  if(mikrotik.available()>0)
  {
    temp = mikrotik.read();

      if ( j >= 0) {
        if ( temp == 0x02 ) {
          Serial.println( "New page" );
        }
        else if (j > 61) {
          //Serial.print( " " );
        }
        else {
          buffer[i++] = temp;
          buffer[i] = '\0';
        }
      }

      j++;
    if ( j >= 63 ) {
      break;
    }
   
   }
 }
Serial.println(buffer);
lcd.print(buffer);
}

 

A kész projekt:

mikrotik-arduino5

 

Az eredeti videó, ami alapján készült a projekt: