• Du musst dich registrieren, bevor du Beiträge verfassen kannst. Klicke auf Jetzt registrieren!, um den Registrierungsprozess zu starten. Registrierte User surfen werbefrei, können Suchen durchführen und sehen die volle Darstellung des Forums mit vielen anderen Unterforen!!!

WLANThermometer Release 2.0.0-0 ist da!

@Schwabe

Die v3 Platine besitzt einen eigenen Mikrocontroller (Attiny45) welcher den Shutdown regelt. Die v2 Software unterstützt diese Funktion.

Falls du mit einer Zusatzplatine die Funktion nachrüsten willst bei der Hardwareversion 2 dann musst du dir die Shutdownschaltung nachbauen:

Raspberry Pi AddOn v3 rev.1 Schaltplan.png


Über den ISP Anschluß kannst du den Mikrocontroller Programmieren.

Hier der source code:

Code:
'-------------------------------------------------------------------------------

'name                     : Raspberry Pi WLANThermo v3 REV.1

'copyright                : (c) 2014-2015, Florian R.

'version                  : v1.6

'micro                    : Attiny45

'quarz                    : int 8Mhz

'             -----------------------Attiny_45-----------------------
'                                            +---v---+
'                        (Reset) PB5 |1        8| VCC (5V)
'   (LCD Beleuchtung)  PB3 |2        7| PB2 (IRLU024)
'      (Shutdown Signal) PB4 |3       6| PB1 (Taster)
'                                   GND |4        5| PB0 (Status LED)
'                                             +-------+
'             -------------------------------------------------------

'-------------------------------------------------------------------------------

'$sim
$regfile = "attiny45.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 68
$framesize = 68

' Status LED ------------------------------------------------------------
Config Portb.0 = Output                                     'Pin als Ausgang setzen
Status_led Alias Portb.0                                    ' Status LED
Dim Led_flash_slow As Bit , Led_flash_fast As Bit , Led_flash As Byte
   Const Status_led_on = 0                                  ' Status LED on/off deklarieren
      Const Status_led_off = 1                              ' Status LED on/off deklarieren
Status_led = Status_led_off
' ------------------------------------------------------------------------------

' "Taster"-befehl von AVR zu RaspberryPi für den Shutdown

Config Pinb.4 = Input
Set Portb.4
Dim Command_from_raspberry As Bit

' Taster -----------------------------------------------------------------------
Config Pinb.1 = Input                                       ' Tastenpin als Eingang
Set Portb.1                                                 ' Pullup ein, Taste schaltet nach GND
Taster Alias Pinb.1                                         ' Passenden Alias vergeben
' ------------------------------------------------------------------------------

' Taster Auswertung ------------------------------------------------------------
Const True = 1 : Const False = 0

Dim Counts_pressed As Word , Counts_released As Byte , Clicks As Byte
Dim Key_state As Byte , Old_key_state As Byte , Key_event As Byte
Dim Tmr_event_1 As Byte
   Const Key_not_pressed = 0
      Const Key_long_pressed = 1
         Const Key_single_klick = 2
            Const Key_double_klick = 3
               Const Key_tripple_klick = 4

' ------------------------------------------------------------------------------

' Setup Menü ------------------------------------------------------------
Dim Setup_flag As Bit
Dim Setup_counter As Integer
Dim Setup_counter_2 As Integer
Dim Flash_sequence As Integer
   Const Setup_1 = 1
      Const Setup_2 = 2
         Const Setup_3 = 3
            Const Setup_4 = 4
' ------------------------------------------------------------------------------

' LCD Hintergrundbeleuchtung ---------------------------------------------------
Config Portb.3 = Output                                     'Pin als Ausgang setzen
Lcd_backlight Alias Portb.3                                 ' LCD
   Const Lcd_backlight_on = 0                               ' LCD Hintergrundbeleuchtung on/off deklarieren *
      Const Lcd_backlight_off = 1                           ' LCD Hintergrundbeleuchtung on/off deklarieren *
         Const Lcd_time_short = 1500                        'Zeit für Displaybeleuchtung (default 1500=15 Sekunden)
            Const Lcd_time_long = 30000                     'Zeit für Displaybeleuchtung bei doppelklick (default 30000=5min)
               Const Lcd_max_brightness = 50                'Maximal Wert für Hintergrundhelligkeit (darf nicht höher als 50 sein)
                  Const Lcd_min_brightness = 5              'Minimal Wert für Hintergrundhelligkeit

Dim Lcd_backlight_flag As Bit , Lcd_counter As Integer , Lcd_brightness As Byte
Dim Lcd_brightness_counter As Byte , Incr_brightness_timer0 As Byte       ' Zähler
Dim Lcd_brightness_fadein_flag As Bit , Lcd_brightness_fadeout_flag As Bit
Dim Brightness_menue_flag As Bit , Lcd_fade_counter As Byte
Dim Lcd_time As Long

Lcd_backlight = Lcd_backlight_off

'* Zum invertieren 0 und 1 tauschen
' ------------------------------------------------------------------------------

' Raspberry Pi Stromversorgung -------------------------------------------------
Raspi_power Alias Portb.2                                   ' IRLU024
Raspi_power = 0
Config Portb.2 = Output                                     ' IRLU024
   Const Raspi_power_on = 1                                 ' Raspberry Pi Stromversorgung on/off deklarieren *
      Const Raspi_power_off = 0                             ' Raspberry Pi Stromversorgung on/off deklarieren *
         Const Shutdown_time = 3000                         ' Shutdown Zeit = 30 Sekunden
            Const Boot_time = 5000                          ' Startzeit für die Led_Sequenze (Raspberry braucht ca. 50Sekunden zum starten)
Dim Shutdown_flag As Bit
Dim Shutdown_counter As Integer
Dim Boot_flag As Bit
Dim Boot_counter As Integer
'* Zum invertieren 0 und 1 tauschen
' ------------------------------------------------------------------------------

' Timer0 -----------------------------------------------------------------------
Config Timer0 = Timer , Prescale = 64                       ' Interrupt alle 1ms
Enable Timer0
On Timer0 Tmr_isr
Enable Interrupts
Timer0 = 131
Dim Lcd_backlight_allways_on As Bit
Dim Incr_timer0 As Byte
' ------------------------------------------------------------------------------

' Timer1 -----------------------------------------------------------------------
Config Timer1 = Timer , Prescale = 64
On Timer1 Isr_timer1
Enable Timer1
Start Timer1
Timer1 = 205
Enable Interrupts
' ------------------------------------------------------------------------------

' EERAM ------------------------------------------------------------------------
Dim Eedummy As Eram Byte                                    ' Erste Speicheradresse Freilassen
   Dim Ee_autoboot As Eram Byte                             ' EEPROM Variable setzen für Bootmenü
      Dim Ee_lcd_brightness As Eram Byte                    ' EEPROM Variable setzen für LCD Helligkeit
' ------------------------------------------------------------------------------

' Autoboot ---------------------------------------------------------------------
Dim Autoboot As Byte                                        ' Variable


Autoboot = Ee_autoboot

Select Case Autoboot

   Case 1 :                                                 'Menü 1 : Raspberry startet Automatisch + LCD Hintergrundbeleuchtung ist bei Tastendruck für x Sekunden aktiviert

      Set Boot_flag
      Boot_counter = 0
      Status_led = Status_led_on                            'Status LED on

   Case 2 :                                                 'Menü 2 : Raspberry startet Automatisch + LCD Hintergrundbeleuchtung ist immer ein

      Set Boot_flag
      Boot_counter = 0
      Status_led = Status_led_on                            'Status Led on
      Set Lcd_backlight_allways_on                          'LCD backlight on

   Case 3 :                                                 'Menü 3 : Raspberry startet erst bei Tastendruck + LCD Hintergrundbeleuchtung ist bei Tastendruck für x Sekunden aktiviert


   Case 4 :                                                 'Menü 4 : Raspberry startet erst bei Tastendruck + LCD Hintergrundbeleuchtung ist immer ein

      Set Lcd_backlight_allways_on                          'LCD backlight on

   Case Else :                                              ' Falls im EEPROM noch kein wert hinterlegt ist...

      Autoboot = 1
      Ee_autoboot = Autoboot                                ' Menü wird auf 1 gesetzt
      Ee_lcd_brightness = Lcd_max_brightness                ' LCD Helligkeit wird auf max gesetzt
      Set Boot_flag                                         ' Raspberry wird gestartet

End Select

Lcd_brightness = Ee_lcd_brightness
' ------------------------------------------------------------------------------

Do

'_______________________________________________________________________________
'LCD Hintergrundbeleuchtung dauerhaft einschalten falls eingestellt-------------
   If Raspi_power = Raspi_power_on And Lcd_backlight_allways_on = 1 And Setup_flag = 0 Then
         Lcd_backlight = Lcd_backlight_on
   End If
'_______________________________________________________________________________

   '____________________________________________________________________________
   'Tastendruck verarbeiten-----------------------------------------------------
   If Tmr_event_1 = True Then
      Tmr_event_1 = False
      Gosub Key_manager
      If Key_event = True Then
            Select Case Key_state
               'Case Key_not_pressed :

               '________________________________________________________________
               'Taste lange gedrückt--------------------------------------------

               Case Key_long_pressed :

                  '_____________________________________________________________
                  'Setup Menue verlassen----------------------------------------
                  If Setup_flag = 1 Then                    ' Wenn der AVR im Setupmenue ist dann...
                     Ee_autoboot = Autoboot                 'neue Einstellungen im Ram speichern
                     Reset Setup_flag                       ' Setup Flag ruecksetzen
                     Status_led = Status_led_off            'Status Led auschalten
                     Set Boot_flag                          'Bootflag setzen
                     Boot_counter = 0                       'Bootcounter auf rücksetzen
                  End If
                  '_____________________________________________________________

                  '_____________________________________________________________
                  'Shutdown befehl wurde erteilt--------------------------------
                  If Raspi_power = Raspi_power_on And Setup_flag = 0 And Boot_flag = 0 Then       ' Wenn Raspberry schon läuft dann...
                     Command_from_raspberry = 0
                     Shutdown_flag = 1                      ' Shutdown einleiten
                     Shutdown_counter = 0                   ' Counter auf 0 stellen
                     Led_flash_slow = 1                     ' Led blinken lassen
                  '_____________________________________________________________
                  'In das Setup Menue wechseln----------------------------------
                  Elseif Raspi_power = Raspi_power_off And Setup_flag = 0 And Boot_flag = 0 Then       ' Wenn Raspi noch nicht läuft...

                     Set Setup_flag                         'Setup Flag setzen
                     Setup_counter = 0                      'Counter zuruecksetzen
                     Setup_counter_2 = 0                    'Counter zuruecksetzen

                  End If
                  '_____________________________________________________________

               '________________________________________________________________
               'Taste einfach gedrückt------------------------------------------

               Case Key_single_klick :                      ' Einfacher Tastendruck wurde erkannt

                  '_____________________________________________________________
                  'Wenn sich der AVR nicht im Setupmodus befindet...------------

                  If Setup_flag = 0 Then
                      If Raspi_power = Raspi_power_off And Setup_flag = 0 And Brightness_menue_flag = 0 Then
                         Boot_counter = 0
                         Set Boot_flag                      ' Raspberry Pi starten
                      Elseif Raspi_power = Raspi_power_on And Setup_flag = 0 And Brightness_menue_flag = 0 Then
                        Set Lcd_backlight_flag              ' Lcd Hintergrundbeleuchtung wird für x Sekunden eingeschaltet
                        Lcd_time = Lcd_time_short
                        Lcd_brightness_fadein_flag = 1
                        Lcd_counter = 0                     ' Counter zurücksetzen
                      Elseif Raspi_power = Raspi_power_on And Setup_flag = 0 And Brightness_menue_flag = 1 Then

                        '_______________________________________________________
                        'Display Helligkeit wird bei Tastendruck um x erhöht----
                        If Lcd_fade_counter <= Lcd_max_brightness Then
                           Lcd_fade_counter = Lcd_fade_counter + 5
                           Lcd_counter = 0
                        End If
                        If Lcd_fade_counter > Lcd_max_brightness Then
                           Lcd_fade_counter = Lcd_min_brightness
                           Lcd_counter = 0
                        End If
                        '_______________________________________________________

                      End If
                      '_________________________________________________________

                  End If
                  '_____________________________________________________________

                  '_____________________________________________________________
                  'Wenn sich der AVR im Setupmodus befindet...------------------

                  If Setup_flag = 1 Then
                      Status_led = Status_led_off
                      Setup_counter_2 = 0                   'Counter zuruecksetzen
                      Setup_counter = 0                     'Counter zuruecksetzen

                      Select Case Autoboot
                         Case 1:
                            Autoboot = 2                    'Autoboot wird bei Tastendruck um 1 erhöht
                            Set Lcd_backlight_allways_on    'Flag setzen damit LCD Beleuchtung immer leuchtet
                         Case 2:
                            Autoboot = 3                    'Autoboot wird bei Tastendruck um 1 erhöht
                            Reset Lcd_backlight_allways_on  'Flag löschen damit LCD Beleuctung nur bei Tastendruck für x Sekunden leuchtet
                         Case 3:
                            Autoboot = 4                    'Autoboot wird bei Tastendruck um 1 erhöht
                            Set Lcd_backlight_allways_on    'Flag setzen damit LCD Beleuchtung immer leuchtet
                         Case 4:
                            Autoboot = 1                    'Autoboot wird bei Tastendruck auf 1 zurückgesetzt
                            Reset Lcd_backlight_allways_on  'Flag löschen damit LCD Beleuctung nur bei Tastendruck für x Sekunden leuchtet
                      End Select

                  End If

               '________________________________________________________________
               'Taster zweimal gedrückt-----------------------------------------
               Case Key_double_klick :
                  If Raspi_power = Raspi_power_on And Setup_flag = 0 And Brightness_menue_flag = 0 Then
                     Set Lcd_backlight_flag                 ' Lcd Hintergrundbeleuchtung wird für x Sekunden eingeschaltet
                     Lcd_time = Lcd_time_long
                     Lcd_brightness_fadein_flag = 1
                     Lcd_counter = 0                        ' Counter zurücksetzen
                  End If

               '________________________________________________________________
               'Taster dreimal gedrückt-----------------------------------------
               Case Key_tripple_klick :

                  If Raspi_power = Raspi_power_on And Setup_flag = 0 Then
                     If Brightness_menue_flag = 0 Then
                        Set Brightness_menue_flag
                        Set Lcd_backlight_flag              ' Lcd Hintergrundbeleuchtung wird für x Sekunden eingeschaltet
                        Lcd_time = Lcd_time_short
                        Lcd_brightness_fadein_flag = 1
                        Lcd_counter = 0                     ' Counter zurücksetzen
                     Elseif Brightness_menue_flag = 1 Then
                        If Lcd_brightness <> Lcd_fade_counter Then
                           Lcd_brightness = Lcd_fade_counter
                           Ee_lcd_brightness = Lcd_brightness
                           Reset Brightness_menue_flag
                        End If
                     End If
                  End If                                    '________________________________________________________________
               '----------------------------------------------------------------
            End Select
      End If
   End If
   '____________________________________________________________________________

   '____________________________________________________________________________
   'Shutdown wurde eingeleitet--------------------------------------------------
   If Shutdown_flag = 1 Then

      If Command_from_raspberry = 0 And Shutdown_counter < 300 Then
         Config Portb.4 = Output
         Portb.4 = 1
      End If

      If Command_from_raspberry = 0 And Shutdown_counter > 300 Then
         Reset Portb.4
         Config Pinb.4 = Input
         Set Portb.4
      End If


      If Shutdown_counter > Shutdown_time And Status_led = Status_led_off Then
         Reset Led_flash_slow
         Shutdown_flag = 0
         Reset Command_from_raspberry
         Lcd_backlight = Lcd_backlight_off
         Raspi_power = Raspi_power_off
         Status_led = Status_led_off
      End If
   End If

   If Shutdown_flag = 0 And Raspi_power = Raspi_power_on Then
      Debounce Pinb.4 , 1 , Shutdown_from_raspberry , Sub
   End If

   '____________________________________________________________________________

   '____________________________________________________________________________
   'Bootvorgang wurde eingeleitet-----------------------------------------------
   If Boot_flag = 1 Then
      '_________________________________________________________________________
      'Wenn die Bootsequenz vorbei ist...---------------------------------------
      If Boot_counter > Boot_time Then
         Reset Led_flash_fast                               'Schnelles LED Blinekn ausschalten
         Reset Boot_flag                                    'Bootflag loeschen
         Boot_counter = 0                                   'Counter zuruecksetzen
         Status_led = Status_led_on                         'Status Led dauerhaft einschalten
      '_________________________________________________________________________
      ' Wenn die Bootsequenz noch nicht vorbei ist...---------------------------
      Else
         Raspi_power = Raspi_power_on                       ' Raspberry Pi starten
         Set Led_flash_fast                                 'Status Led schnell blinken lassen
      End If
   End If
   '____________________________________________________________________________

   '____________________________________________________________________________
   'Hintergrundbeleuchtung wurde Aktiviert--------------------------------------
   If Lcd_backlight_flag = 1 Then
      If Lcd_counter > Lcd_time Then
         Set Lcd_brightness_fadeout_flag
         Reset Brightness_menue_flag                        ' Helligkeitsmenue Flag löschen
         Reset Lcd_backlight_flag                           ' Backlight Flag löschen
      End If
   End If
   '____________________________________________________________________________

   If Setup_flag = 1 Then
      Gosub Setup
   End If

Loop

End

'_______________________________________________________________________________
' Subroutinen ------------------------------------------------------------------
'###############################################################################

'_______________________________________________________________________________
' Setup ------------------------------------------------------------------------
Shutdown_from_raspberry:
         Command_from_raspberry = 1
         Shutdown_flag = 1
         Shutdown_counter = 0
         Led_flash_slow = 1
Return


Setup:
         Flash_sequence = Autoboot * 70
         If Setup_counter = 35 And Setup_counter_2 <= Flash_sequence Then
            Toggle Status_led
            Setup_counter = 0
         End If

         Flash_sequence = Flash_sequence + 100
         If Setup_counter_2 = Flash_sequence Then
            Setup_counter_2 = 0
            Setup_counter = 0
         End If

Return
'_______________________________________________________________________________
' Tastendruck auswerten --------------------------------------------------------

Key_manager:

    'Betätigungsprüfung
    If Taster = 0 Then
         If Counts_released < 15 Then Incr Clicks           'Wiederholte Betätigung
         If Counts_pressed < 1000 Then Incr Counts_pressed  'Betätigungsdauer
         Counts_released = 20
    Else
         If Counts_released <> 0 Then Decr Counts_released  'Keine Betätigung mehr
         Counts_pressed = 0
    End If


    'Auswertung
    If Counts_pressed = 500 Then                            'langer Tastendruck
       Key_state = Key_long_pressed
       Clicks = 0
       Counts_pressed = 1000
    End If

    If Counts_released = 0 Then
       Select Case Clicks
            Case 0 : Key_state = Key_not_pressed
            Case 1 : Key_state = Key_single_klick
            Case 2 : Key_state = Key_double_klick
            Case 3 : Key_state = Key_tripple_klick
       End Select
       Clicks = 0
    End If

    'Ergebnis
    If Old_key_state <> Key_state Then
       Old_key_state = Key_state
       Key_event = True
    Else
       Key_event = False
    End If

Return
'_______________________________________________________________________________

'_______________________________________________________________________________
'Timer0 ------------------------------------------------------------------------

Tmr_isr:

Timer0 = 131                                                ' Timer preload (läuft alle 1ms über)
Incr Incr_timer0
Incr Incr_brightness_timer0

      '_________________________________________________________________________
      'Lcd Hintergrundbeleuchtung ein/aus-blenden-------------------------------
      If Incr_brightness_timer0 > 14 Then                   ' Wird alle 15ms aufgerufen

         '______________________________________________________________________
         'FadeIn----------------------------------------------------------------
         If Lcd_brightness_fadein_flag = 1 Then
            If Lcd_fade_counter < Lcd_brightness Then
               Incr Lcd_fade_counter
            Else
               Lcd_brightness_fadein_flag = 0
            End If
         End If
         '______________________________________________________________________
         'FadeOut---------------------------------------------------------------
         If Lcd_brightness_fadeout_flag = 1 Then
            If Lcd_fade_counter > 0 Then
               Decr Lcd_fade_counter
            Else
               Lcd_brightness_fadeout_flag = 0
            End If
         End If
         '______________________________________________________________________
         'Zaehler zurücksetzen--------------------------------------------------
         Incr_brightness_timer0 = 0

      End If
      '_________________________________________________________________________
      '-------------------------------------------------------------------------

      '_________________________________________________________________________
      'Timer 10ms---------------------------------------------------------------
      If Incr_timer0 > 9 Then                               ' Wird alle 10ms aufgerufen
           '____________________________________________________________________
           'Flag für Taster-----------------------------------------------------
           Tmr_event_1 = True
           '____________________________________________________________________
           'Status Led langsam blinken lassen-----------------------------------
           If Led_flash_slow = 1 Then                       ' Led langsam blinken lassen
              Incr Led_flash
              If Led_flash >= 50 Then                       ' Led im 50 x 10ms (500ms) takt blinken lassen
                 Toggle Status_led                          ' Led Port toggeln
                 Led_flash = 0                              ' Counter zurücksetzen
              End If
           End If
           '____________________________________________________________________
           'Status Led schnell blinken lassen-----------------------------------
           If Led_flash_fast = 1 Then                       ' Led schnell blinken lassen
              Incr Led_flash
              If Led_flash >= 35 Then                       ' Led im 35 x 10ms (350ms) takt blinken lassen
                 Toggle Status_led                          ' Led port toggeln
                 Led_flash = 0                              ' Counter zurücksetzen
              End If
           End If
           '____________________________________________________________________
           'Bei Tastendruck für Hintergrundbeleuchtung wird der Counter erhöht--
           If Lcd_backlight_flag = 1 Then                   ' Lcd Flag
              Incr Lcd_counter
           End If
           '____________________________________________________________________
           'Bei Bootvorgang wird der Counter erhöht-----------------------------
           If Boot_flag = 1 Then                            ' Boot Flag
              Incr Boot_counter
           End If
           '____________________________________________________________________
           'Bei Shutdown wird der Counter erhöht--------------------------------
           If Shutdown_flag = 1 Then                        ' Shutdown Flag
              Incr Shutdown_counter
           End If
           '____________________________________________________________________
           'Im Setup Menue wird der Counter erhöht------------------------------
           If Setup_flag = 1 Then                           'Setup Flag
              Incr Setup_counter
              Incr Setup_counter_2
           End If
           '____________________________________________________________________
           'Counter zuruecksetzen-----------------------------------------------
           Incr_timer0 = 0
           '____________________________________________________________________

      End If
      '_________________________________________________________________________
Return
'_______________________________________________________________________________

'_______________________________________________________________________________
' Timer1 interrupt -------------------------------------------------------------

Isr_timer1:                                                 ' Timer für Software PWM
   Timer1 = 205
   Incr Lcd_brightness_counter
   If Lcd_brightness_counter = 50 Then
      Lcd_brightness_counter = 0
   End If
   If Lcd_brightness_counter < Lcd_fade_counter Then
      Lcd_backlight = Lcd_backlight_on
   Else
      Lcd_backlight = Lcd_backlight_off
   End If
Return
'_______________________________________________________________________________

Fuses auf:

Low Fuse 0xE2
High Fuse 0xDC

Lg
 

Anhänge

  • Raspberry Pi AddOn v3 rev.1 Schaltplan.png
    Raspberry Pi AddOn v3 rev.1 Schaltplan.png
    79,3 KB · Aufrufe: 1.409
Hier nun das neue Update ;-)

WLANThermo v2.0.0-1


FIX: Behebung der 5-fachen Temperaturlogs
FIX: Überflüssige Dateizugriffe beseitigt
ADD: Ergänze Kanalnamen in den Alarmmeldungen

Als root einloggen.

Folgendes eingeben:

service lighttpd stop
killall python
umount /var/www/tmp

nano /etc/fstab


Hier die letzte Zeile löschen oder den Wert 700 in 770 ändern!
Speichern der Änderung mit Strg-o und beenden mit Strg-x.

Jetzt das System updaten:

apt-get update
apt-get upgrade


Danach die Firmware updaten (muss nicht unbedingt sein,falls ihr einen nicht out of the box WLAN-Stick verwendet. Beim Pi 2 aber zwinigend erforderlich! Siehe meine Anmerkung im Hauptthread)

rpi-update

Jetzt den Pi neustarten und wieder als root einloggen.

Danach

cd ~
wget http://www.wlanthermo.com/dl/WLANThermo_install.run
chmod +x WLANThermo_install.run
./WLANThermo_install.run
 
Zurück
Oben Unten