MCP3004 in FHEM - Python Script in Perl abbilden

Begonnen von fhainz, 08 Dezember 2014, 10:34:51

Vorheriges Thema - Nächstes Thema

fhainz

Hallo!

Ich hab seit einiger Zeit den MCP3004 AD-Wandler (gibts für ein paar Euro bei Conrad) an meinem Pi hängen um zB die Helligkeit auszulesen. Die Kommunikation mit dem Pi läuft über SPI.
Das Auslesen hat mit einem Python Script auf Anhieb geklappt und die Werte werden an auch FHEM weitergemeldet.

Bisher ruft ein at das Script jede Minute auf, in dem auch das FHEM direkt eingetragen ist. Das würde ich gerne ändern und das Python Script in Perl Script ändern.

Hat jemand einen Tipp für mich wie ich das umbauen könnte? Mit Python kenn ich mich leider gar nicht aus.


Grüße


#! /usr/bin/env python

# Python Code to communicate with MCP3004

#Import SpiDev wrapper and Sleep function from time
import spidev
import os, sys
from time import sleep

#Establish SPI Connection on Bus 0, Device 0
spi = spidev.SpiDev()
spi.open(0,0)

def get_adc(channel):
    #Check valid channel
    if((channel > 3) or (channel < 0)):
        return -1

    #Perform SPI transaction and store returned bits in 'r'
    r = spi.xfer([1, (8+channel)<<4, 0])
   
    #Filter data bits from returned bits
    adcout = ((r[1]&3) << 8) + r[2]
    adcout2 = 1024 - adcout
    percent = int(round(adcout2/10.23))
   
    #Print 0-1023 and percentage
    # print("ADC Output: {0:4d}     Percentage: {1:3d}%".format(adcout,percent))
    os.system('perl /opt/fhem/fhem.pl 7072 "setreading raspiVT_vzHelligkeit value'+str(channel)+' '+str(adcout2)+'"')
    os.system('perl /opt/fhem/fhem.pl 7072 "setreading raspiVT_vzHelligkeit percent'+str(channel)+' '+str(percent)+'"')

get_adc(0)




klausw

Zitat von: fhainz am 08 Dezember 2014, 10:34:51
Ich hab seit einiger Zeit den MCP3004 AD-Wandler (gibts für ein paar Euro bei Conrad) an meinem Pi hängen um zB die Helligkeit auszulesen. Die Kommunikation mit dem Pi läuft über SPI.
Das Auslesen hat mit einem Python Script auf Anhieb geklappt und die Werte werden an auch FHEM weitergemeldet.
Naja am einfachsten wäre es, stattdessen den MCP3422 oder MCP3424 zu nehmen. Der wird über I2C angeschlossen und seit heute gibt es ein Modul dafür.

Oder eine Lösung entsprechend dem RPII2C Modul. Die SPI Schnittststelle sollte sich ähnlich ansprechen lassen. Dafür könnte man dann auch weitere passende logische Module entsprechend den I2C Modulen entwerfen.
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

fhainz

Das ist ein SMD Chip oder? Ich bin mir sicher, dass alle SMD Chips die ich löte anschließend tot sind ;D

Ich werde mir mal das RPII2C Modul ansehen, aber ich befürchtete das ist noch mind. einen Schritt zu hoch für mich.

Danke für die Infos.

Grüße

betateilchen

das RPII2C  musst Du Dir nicht anschauen, sondern einfach benutzen, das ist simpel.

Interessant ist dann erst das (neue) device Modul. Ich werde das die Tage mal mit dem UniPi Board testen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

fhainz

#4
Das RPII2C Modul zu benutzen ist sicher simple nur würde es bei mir vorher schon scheitern das SMD Ding auf eine Platine zu löten.
Deswegen wollte ich mir das RPII2C Modul ansehen um das mit spi nachzustellen bzw einen Ansatz bekomme wie ich das Python Script von oben in Perl abbilden kann.

klausw

#5
Zitat von: fhainz am 09 Dezember 2014, 20:02:11
Deswegen wollte ich mir das RPII2C Modul ansehen um das mit spi nachzustellen bzw einen Ansatz bekomme wie ich das Python Script von oben in Perl abbilden kann.
Als erstes müsstest du rausfinden, wie man über Ioctl auf den Spi Bus zugreift.
Der Rest ist nur Fleißarbeit.

edit:
hier habe ich die infos für den I2C her.
und hier gibt es was vergleichbares für den SPI Bus.
Einige Infos fehlen, aber es ist ein guter Einstieg.
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

fhainz

Danke für die Links!
Ich hab mir das jetzt mehrmals durchgelesen, aber ich werde daraus nicht schlau. Das ist anscheinend wirklich noch eine Stufe zu hoch für mich. Hab auch noch gegooglet und gesehen das es von HiPi eine SPI.pm und eine MCP3004.pm gibt, aber aus denen werde ich auch nicht schlau  ;D

Vielleicht finde ich im Weihnachtsurlaub Zeit mich da näher einzulesen, aber mit meinen derzeitigen Kenntnissen wird das nix ;)


Grüße

Mani007

Hallo zusammen,

mhhh den MCP3004/3008 gibt es doch als DIP ?? Oder bin ich da falsch ??

http://www.tme.eu/de/details/mcp3004-i_p/ad-wandler-integrierte-schaltungen/microchip-technology/

Naja bist du den Totgebraten hättest ! Habe ich bis jetzt noch nie geschafft .

Alternative könntest du doch den ADC PI nehmen alles fertig I2C fertig zum aufstecken fürn rasp.

https://www.abelectronics.co.uk/products/3/Raspberry-Pi/17/ADC-Pi-V2---Raspberry-Pi-Analogue-to-Digital-converter

Alternative könnte man auch wenn ich das Python script richtig verstanden habe das auch ohne SPI Bus machen .
Wichtig wäre nur die GPIO Library um den IC Daten zu senden und zu empfangen. Sende Eingang => Chip Selsect => Jedes Mal mit Flanke quittieren => Daten empfangen => Umwandeln von binär auf dezimal . (Da kommt bestimmt nocht korrektur wie ich das geschrieben habe grins.)

http://erik-bartmann.de/component/attachments/download/21.html


FHEM 5.5 auf Raspberry Pi B+

FB7390 Fritz!OS6.23
CUL 868  V1.61 / 1 x HM-SCI-3-FM / 1 x HM-SEC-SC / 3 x HM-LC-DIM1T-FM / 1 x HM-LC-DIM1TBU-FM /     
4 x HM-CC-RT-DN / 3 x HM-LC-SW1-FM / 2 x HM-WDS30-T-O / 2 x FRITZ!DECT 200 / Openvpn /VU + DUO

fhainz

Der MCP3004 läuft ja (mit dem python scrit) diesen löten war nicht das Problem. SMD löten ist schon ein problem ;)

Mani007

FHEM 5.5 auf Raspberry Pi B+

FB7390 Fritz!OS6.23
CUL 868  V1.61 / 1 x HM-SCI-3-FM / 1 x HM-SEC-SC / 3 x HM-LC-DIM1T-FM / 1 x HM-LC-DIM1TBU-FM /     
4 x HM-CC-RT-DN / 3 x HM-LC-SW1-FM / 2 x HM-WDS30-T-O / 2 x FRITZ!DECT 200 / Openvpn /VU + DUO