128X64 OLED LCD Display SSD1306 am Arduino Nano

Das OLED Display, dass man überall verbauen kann. Es ist klein aber dennoch gut zu lesen. Diese Displays gibt es in den unterschiedlichsten Farben und Schnittstellen.  Ich habe mit hier für die SPI Variante entschieden. Das Display U8G2_SSD1306_128X64 bekommt man bei eBay für einen schmalen Taler 🙂

Anbei ein kleiner Test mit Hilfe des Arduino Nanos.

Da ich mehre Displays testen wollte, habe ich noch eine weiter Schaltung aufgebaut.

Und zu guter letzt der Programmcode, es empfiehlt sich die Bibliothek U8g2lib von github zu laden.

#include <Arduino.h>
#include <U8g2lib.h>
#include <SPI.h>
#include <Wire.h>
#include <SoftwareSerial.h>
//U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI(rotation, clock, data, cs, dc [, reset])
//U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI u8g2(U8G2_R0, 2, 3, 9, 8, 6);
U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI u8g2(U8G2_R0, 12, 11, 8, 9, 10);
// U8G2_SSD1306_128X64_NONAME_F_3W_SW_SPI u8g2(U8G2_R0, 3, 4, 7, 5);

const int irSense = A0;            // Connect sensor to analog pin A0
int distance = 0;

typedef u8g2_uint_t u8g_uint_t;



#define SECONDS 10
uint8_t flip_color = 0;
uint8_t draw_color = 1;

void draw_set_screen(void) {
  // graphic commands to redraw the complete screen should be placed here  
  u8g2.setColorIndex(flip_color);
  u8g2.drawBox( 0, 0, u8g2.getWidth(), u8g2.getHeight() );
}

void draw_clip_test(void) {
  u8g_uint_t i, j, k;
  char buf[3] = "AB";
  k = 0;
  u8g2.setColorIndex(draw_color);
  u8g2.setFont(u8g2_font_6x10_tf);
  
  for( i = 0; i  < 6; i++ ) {
    for( j = 1; j  < 8; j++ ) {
      u8g2.drawHLine(i-3, k, j);
      u8g2.drawHLine(i-3+10, k, j);
      
      u8g2.drawVLine(k+20, i-3, j);
      u8g2.drawVLine(k+20, i-3+10, j);
      
      k++;
    }
  }
  u8g2.setFontDirection(0);
  u8g2.drawStr(0-3, 50, buf);
  u8g2.setFontDirection(2);
  u8g2.drawStr(0+3, 50, buf);
  
  u8g2.setFontDirection(0);
  u8g2.drawStr(u8g2.getWidth()-3, 40, buf);
  u8g2.setFontDirection(2);
  u8g2.drawStr(u8g2.getWidth()+3, 40, buf);

  u8g2.setFontDirection(1);
  u8g2.drawStr(u8g2.getWidth()-10, 0-3, buf);
  u8g2.setFontDirection(3);
  u8g2.drawStr(u8g2.getWidth()-10, 3, buf);

  u8g2.setFontDirection(1);
  u8g2.drawStr(u8g2.getWidth()-20, u8g2.getHeight()-3, buf);
  u8g2.setFontDirection(3);
  u8g2.drawStr(u8g2.getWidth()-20, u8g2.getHeight()+3, buf);

  u8g2.setFontDirection(0);

}

void draw_char(void) {
  char buf[2] = "@";
  u8g_uint_t i, j;
  // graphic commands to redraw the complete screen should be placed here  
  u8g2.setColorIndex(draw_color);
  u8g2.setFont(u8g2_font_6x10_tf);
  j = 8;
  for(;;) {
    i = 0;
    for(;;) {
      u8g2.drawStr( i, j, buf);
      i += 8;
      if ( i > u8g2.getWidth() )
        break;
    }
    j += 8;
    if ( j > u8g2.getHeight() )
      break;
  }
  
}

void draw_pixel(void) {
  u8g_uint_t x, y, w2, h2;
  u8g2.setColorIndex(draw_color);
  w2 = u8g2.getWidth();
  h2 = u8g2.getHeight();
  w2 /= 2;
  h2 /= 2;
  for( y = 0; y < h2; y++ ) {
    for( x = 0; x < w2; x++ ) {
      if ( (x + y) & 1 ) {
        u8g2.drawPixel(x,y);
        u8g2.drawPixel(x,y+h2);
        u8g2.drawPixel(x+w2,y);
        u8g2.drawPixel(x+w2,y+h2);
      }
    }
  }
}

// returns unadjusted FPS
uint16_t picture_loop_with_fps(void (*draw_fn)(void)) {
  uint16_t FPS10 = 0;
  uint32_t time;
  
  time = millis() + SECONDS*1000;
  
  // picture loop
  do {
    u8g2.firstPage();  
    do {
      draw_fn();
    } while( u8g2.nextPage() );
    FPS10++;
    flip_color = flip_color ^ 1;
  } while( millis() < time );
  return FPS10;  
}

const char *convert_FPS(uint16_t fps) {
  static char buf[6];
  strcpy(buf, u8g2_u8toa( (uint8_t)(fps/10), 3));
  buf[3] =  '.';
  buf[4] = (fps % 10) + '0';
  buf[5] = '\0';
  return buf;
}

void show_result(const char *s, uint16_t fps) {
  // assign default color value
  u8g2.setColorIndex(draw_color);
  u8g2.setFont(u8g2_font_8x13B_tf);
  u8g2.firstPage();  
  do {
    u8g2.drawStr(0,12, s);
    u8g2.drawStr(0,24, convert_FPS(fps));
  } while( u8g2.nextPage() );
}

void setup(void) {

  /* U8g2 Project: SSD1306 Test Board */
  //pinMode(10, OUTPUT);
  //pinMode(9, OUTPUT);
  //digitalWrite(10, 0);
  //digitalWrite(9, 0);    

  /* U8g2 Project: T6963 Test Board */
  //pinMode(18, OUTPUT);
  //digitalWrite(18, 1);

  /* U8g2 Project: KS0108 Test Board */
  //pinMode(16, OUTPUT);
  //digitalWrite(16, 0);  

  /* U8g2 Project: LC7981 Test Board, connect RW to GND */
  //pinMode(17, OUTPUT);
  //digitalWrite(17, 0);  
   Serial.begin(9600);
  u8g2.begin();


  // flip screen, if required
  // u8g2.setRot180();


  // assign default color value
  draw_color = 1;         // pixel on
  
}

void loop(void) {
 
  Serial.println("Hello");
  uint16_t fps;
  fps = picture_loop_with_fps(draw_clip_test);
  show_result("draw clip test", fps);
  delay(5000);
  fps = picture_loop_with_fps(draw_set_screen);
  show_result("clear screen", fps);
  delay(5000);
  fps = picture_loop_with_fps(draw_char);
  show_result("draw @", fps);
  delay(5000);  
  fps = picture_loop_with_fps(draw_pixel);
  show_result("draw pixel", fps);
  distance = analogRead(irSense);  // Read the sensor
  Serial.println(distance, DEC);   // Display value in Serial Monitor window
  delay(5000);
}

 

[Raspberry Pi] send Mail Konfiguration

How to Configure the Raspberry Pi with Debian image to Send Mails trouth an firewall.

# Login as Root
# Update Package List
apt-get update
# apt-get install ssmtp

# if Installation complete
# Configure the ssmtp.conf

vim /etc/ssmtp/ssmtp.conf
root=yourMailAddy@myDomain.com

# Sender Server / Extern Mail Hoster Adress
mailhub=mail.myDomain.com:25

# Senders Host must be Exist.
hostname=myDomain.com

AuthUser=myMailUserName
AuthPass=MySecretKey
UseTLS=YES

Now the Mail Configuration is ready to test.

# Login as Root
pstree | mail -s "PSTREE RESULT" mymail@addyy.com

If you plan to test this Projekt you need:

Asterisk asterisk-chan-dongle

So erstellt du chan-dongle für deine Asterisk GSM box am Beispiel fürs Cubieboard.


# root werden
sudo su -
# Paket Quellen erneuern
apt-get update
# Asterisk installieren mit zugehörigen Dev und Dok Packen
apt-get install asterisk asterisk-dev asterisk-doc asterisk-modules
# asterisk-chan-dongle downloaden
cd /usr/src
wget https://code.google.com/p/asterisk-chan-dongle/downloads/detail?name=chan_dongle-1.1.r14.tgz
# asterisk-chan-dongle entpacken
tar xzf chan_dongle-1.1.r14.tgz
cd chan_dongle-1.1.r14/
# Chan_dongle conf und bauen..
./configure --enable-debug
make
make install
# dongle conf in Asterisk kopieren und rechte definieren.
cp etc/dongle.conf /etc/asterisk/
chown asterisk:asterisk /etc/asterisk/dongle.conf
service asterisk restart
# Asterisk kontrollieren
asterisk -r