erster Commit
This commit is contained in:
114
LCD1602.py
Normal file
114
LCD1602.py
Normal file
@@ -0,0 +1,114 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import time
|
||||||
|
from smbus import SMBus
|
||||||
|
b = SMBus(1)
|
||||||
|
|
||||||
|
#Device I2C Arress
|
||||||
|
LCD_ADDRESS = (0x7c>>1)
|
||||||
|
|
||||||
|
LCD_CLEARDISPLAY = 0x01
|
||||||
|
LCD_RETURNHOME = 0x02
|
||||||
|
LCD_ENTRYMODESET = 0x04
|
||||||
|
LCD_DISPLAYCONTROL = 0x08
|
||||||
|
LCD_CURSORSHIFT = 0x10
|
||||||
|
LCD_FUNCTIONSET = 0x20
|
||||||
|
LCD_SETCGRAMADDR = 0x40
|
||||||
|
LCD_SETDDRAMADDR = 0x80
|
||||||
|
|
||||||
|
#flags for display entry mode
|
||||||
|
LCD_ENTRYRIGHT = 0x00
|
||||||
|
LCD_ENTRYLEFT = 0x02
|
||||||
|
LCD_ENTRYSHIFTINCREMENT = 0x01
|
||||||
|
LCD_ENTRYSHIFTDECREMENT = 0x00
|
||||||
|
|
||||||
|
#flags for display on/off control
|
||||||
|
LCD_DISPLAYON = 0x04
|
||||||
|
LCD_DISPLAYOFF = 0x00
|
||||||
|
LCD_CURSORON = 0x02
|
||||||
|
LCD_CURSOROFF = 0x00
|
||||||
|
LCD_BLINKON = 0x01
|
||||||
|
LCD_BLINKOFF = 0x00
|
||||||
|
|
||||||
|
#flags for display/cursor shift
|
||||||
|
LCD_DISPLAYMOVE = 0x08
|
||||||
|
LCD_CURSORMOVE = 0x00
|
||||||
|
LCD_MOVERIGHT = 0x04
|
||||||
|
LCD_MOVELEFT = 0x00
|
||||||
|
|
||||||
|
#flags for function set
|
||||||
|
LCD_8BITMODE = 0x10
|
||||||
|
LCD_4BITMODE = 0x00
|
||||||
|
LCD_2LINE = 0x08
|
||||||
|
LCD_1LINE = 0x00
|
||||||
|
LCD_5x8DOTS = 0x00
|
||||||
|
|
||||||
|
|
||||||
|
class LCD1602:
|
||||||
|
def __init__(self, col, row):
|
||||||
|
self._row = row
|
||||||
|
self._col = col
|
||||||
|
self._showfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS;
|
||||||
|
self.begin(self._row,self._col)
|
||||||
|
|
||||||
|
|
||||||
|
def command(self,cmd):
|
||||||
|
b.write_byte_data(LCD_ADDRESS,0x80,cmd)
|
||||||
|
|
||||||
|
def write(self,data):
|
||||||
|
b.write_byte_data(LCD_ADDRESS,0x40,data)
|
||||||
|
|
||||||
|
def setCursor(self,col,row):
|
||||||
|
if(row == 0):
|
||||||
|
col|=0x80
|
||||||
|
else:
|
||||||
|
col|=0xc0;
|
||||||
|
self.command(col)
|
||||||
|
|
||||||
|
def clear(self):
|
||||||
|
self.command(LCD_CLEARDISPLAY)
|
||||||
|
time.sleep(0.002)
|
||||||
|
def printout(self,arg):
|
||||||
|
if(isinstance(arg,int)):
|
||||||
|
arg=str(arg)
|
||||||
|
|
||||||
|
for x in bytearray(arg,'utf-8'):
|
||||||
|
self.write(x)
|
||||||
|
|
||||||
|
|
||||||
|
def display(self):
|
||||||
|
self._showcontrol |= LCD_DISPLAYON
|
||||||
|
self.command(LCD_DISPLAYCONTROL | self._showcontrol)
|
||||||
|
|
||||||
|
|
||||||
|
def begin(self,cols,lines):
|
||||||
|
if (lines > 1):
|
||||||
|
self._showfunction |= LCD_2LINE
|
||||||
|
|
||||||
|
self._numlines = lines
|
||||||
|
self._currline = 0
|
||||||
|
|
||||||
|
time.sleep(0.05)
|
||||||
|
|
||||||
|
|
||||||
|
# Send function set command sequence
|
||||||
|
self.command(LCD_FUNCTIONSET | self._showfunction)
|
||||||
|
#delayMicroseconds(4500); # wait more than 4.1ms
|
||||||
|
time.sleep(0.005)
|
||||||
|
# second try
|
||||||
|
self.command(LCD_FUNCTIONSET | self._showfunction);
|
||||||
|
#delayMicroseconds(150);
|
||||||
|
time.sleep(0.005)
|
||||||
|
# third go
|
||||||
|
self.command(LCD_FUNCTIONSET | self._showfunction)
|
||||||
|
# finally, set # lines, font size, etc.
|
||||||
|
self.command(LCD_FUNCTIONSET | self._showfunction)
|
||||||
|
# turn the display on with no cursor or blinking default
|
||||||
|
self._showcontrol = LCD_DISPLAYON | LCD_CURSOROFF | LCD_BLINKOFF
|
||||||
|
self.display()
|
||||||
|
# clear it off
|
||||||
|
self.clear()
|
||||||
|
# Initialize to default text direction (for romance languages)
|
||||||
|
self._showmode = LCD_ENTRYLEFT | LCD_ENTRYSHIFTDECREMENT
|
||||||
|
# set the entry mode
|
||||||
|
self.command(LCD_ENTRYMODESET | self._showmode);
|
||||||
|
|
40
degdisp.py
Executable file
40
degdisp.py
Executable file
@@ -0,0 +1,40 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# encoding: utf-8
|
||||||
|
|
||||||
|
import time
|
||||||
|
import configparser
|
||||||
|
import logging
|
||||||
|
import LCD1602
|
||||||
|
try:
|
||||||
|
import smbus2
|
||||||
|
except ImportError: # Wenn smbus2 nicht zu importieren ist, nehmen wir smbus
|
||||||
|
from smbus import SMBus
|
||||||
|
import mysql.connector
|
||||||
|
|
||||||
|
port = 1
|
||||||
|
adresse_lcd1602 = 0x25
|
||||||
|
deg = 0o1212
|
||||||
|
|
||||||
|
logging.basicConfig( format='%(asctime)s [%(levelname)s] %(funcName)s: %(message)s', level=logging.DEBUG)
|
||||||
|
|
||||||
|
|
||||||
|
def info(msg):
|
||||||
|
logging.info(msg)
|
||||||
|
|
||||||
|
def debug(msg):
|
||||||
|
logging.debug(msg)
|
||||||
|
|
||||||
|
def print_weather():
|
||||||
|
lcd.setCursor(0, 0)
|
||||||
|
lcd.printout('0o{0:o}'.format(deg))
|
||||||
|
|
||||||
|
|
||||||
|
#LCD1602 initialisieren
|
||||||
|
lcd=LCD1602.LCD1602(16,2)
|
||||||
|
|
||||||
|
try:
|
||||||
|
while True:
|
||||||
|
print_weather()
|
||||||
|
except(KeyboardInterrupt):
|
||||||
|
lcd.clear()
|
||||||
|
|
66
wdisp.py
Executable file
66
wdisp.py
Executable file
@@ -0,0 +1,66 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# encoding: utf-8
|
||||||
|
|
||||||
|
import time
|
||||||
|
import configparser
|
||||||
|
import logging
|
||||||
|
import bme280
|
||||||
|
import LCD1602
|
||||||
|
try:
|
||||||
|
import smbus2
|
||||||
|
except ImportError: # Wenn smbus2 nicht zu importieren ist, nehmen wir smbus
|
||||||
|
from smbus import SMBus
|
||||||
|
import mysql.connector
|
||||||
|
|
||||||
|
port = 1
|
||||||
|
adresse_bme280 = 0x76
|
||||||
|
adresse_lcd1602 = 0x25
|
||||||
|
|
||||||
|
logging.basicConfig( format='%(asctime)s [%(levelname)s] %(funcName)s: %(message)s', level=logging.DEBUG)
|
||||||
|
|
||||||
|
|
||||||
|
def info(msg):
|
||||||
|
logging.info(msg)
|
||||||
|
|
||||||
|
def debug(msg):
|
||||||
|
logging.debug(msg)
|
||||||
|
|
||||||
|
def print_weather(temperature, humidity, pressure):
|
||||||
|
lcd.setCursor(0, 0)
|
||||||
|
lcd.printout('{:05.2f}\223C'.format(temperature)
|
||||||
|
lcd.printout(' {:05.2f}hPa'.format(pressure))
|
||||||
|
|
||||||
|
lcd.setCursor(0, 1)
|
||||||
|
lcd.printout('{:05.2f}%'.format(humidity))
|
||||||
|
# Datenbankverbindung herstellen.
|
||||||
|
config = configparser.ConfigParser()
|
||||||
|
config.read('db.ini')
|
||||||
|
mydb = mysql.connector.connect(host=config['weatherdb']['host'], user=config['weatherdb']['user'],password=config['weatherdb']['password'],database =config['weatherdb']['database'])
|
||||||
|
mycursor = mydb.cursor()
|
||||||
|
debug('Datenverbindung hergestellt.')
|
||||||
|
|
||||||
|
#LCD1602 initialisieren
|
||||||
|
lcd=LCD1602.LCD1602(16,2)
|
||||||
|
|
||||||
|
# BME280 initialisieren
|
||||||
|
bus = smbus2.SMBus(port)
|
||||||
|
calibration_params = bme280.load_calibration_params(bus, adresse_bme280)
|
||||||
|
debug('Sensor kalibriert.')
|
||||||
|
try:
|
||||||
|
while True:
|
||||||
|
data = bme280.sample(bus, adresse_bme280, calibration_params)
|
||||||
|
temperature = data.temperature
|
||||||
|
pressure = data.pressure
|
||||||
|
humidity = data.humidity
|
||||||
|
info('{:05.2f}°C {:05.2f}hPa {:05.2f}%'.format(temperature, pressure, humidity))
|
||||||
|
print_weather(temperature,humidity, pressure)
|
||||||
|
sql = 'INSERT into stats (datum,temperature, humidity, pressure) VALUES(now(), %s, %s, %s)'
|
||||||
|
val = (temperature, humidity, pressure)
|
||||||
|
mycursor.execute(sql, val)
|
||||||
|
mydb.commit()
|
||||||
|
time.sleep(10)
|
||||||
|
except(KeyboardInterrupt):
|
||||||
|
mydb.close()
|
||||||
|
lcd.clear()
|
||||||
|
del lcd
|
||||||
|
|
Reference in New Issue
Block a user