Précédent   Forum FS Generation > Futura-Techno : les forums de l'informatique et des technologies > Électronique
Mot de passe oublié ? Inscrivez-vous !


Réponse
 
Outils de la discussion Modes d'affichage
Vieux 26/01/2008, 10h39   #1
 
Date d'inscription: janvier 2008
Localisation: Paris
Âge: 23
Messages: 92
Programmation pyton sur "microcontroleur" GM862-GPS (fabrication d'un tracker GPS/GSM)

Bonjour à tous, j'aimerais réaliser un petit tracker GPS/GSM "intelligent" qui puisse donc me donner les coordonnées GPS par sms ou gprs (mail) accompagné d'une photo. Pour se faire, je vais acheter le module GM862-GPS
accompagné d'un module caméra.

Etant complètement débutant dans la programmation python ( j'arrive meme pas encore à ecrire un script pour autocad )

J'aimerais avoir l'avis de personnes ayant déjà fait l'acquisition de ce module ( ou de la version PYT ) afin de me dire si je serai capable de programmer un tel projet.


J'ai trouvé déjà un ptit script qui permet d'envoyer un sms avec les coordonnées mais jsais pas du tout si elle est bonne ( et jme vois pas acheter le module avec tous les accesoires ( + de 300€ ) pour finalement me retrouver comme un con à pas pouvoir le faire marcher )

Voici le script:

##### Config #####

sms_password = 'mypassword'


##### Constants #####

TRUE = 1
FALSE = 0


##### Modules #####

#Use serial
import SER

#Use build in module
import MOD

#Use AT command interface
import MDM

#Use GPS
import GPS


###### General Functions ######

#Debug message
def debugmsg(msgtext):
msgtext = msgtext.replace('\r', '\\r')
msgtext = msgtext.replace('\n', '\\n')
print msgtext
SER.send(msgtext + '\r\n')
#f = open('log.txt','ab')
#f.write(msgtext + '\n')
#f.close()

#GPS status
def gps_status(gpspos):
debugmsg('Retrieving GPS status')

gpspos_parts = gpspos.split(',')

if ( (gpspos_parts[5] == '2') or (gpspos_parts[5] == '3') ): #2D or 3D fix
debugmsg('GPS fix "' + gpspos_parts[5] + '" ie valid');
status = TRUE
else:
debugmsg('GPS fix "' + gpspos_parts[5] + '" ie not valid');
status = FALSE

return status


###### SMS Process Functions ######

#Process SMS messages
def sms_proceses(gpspos):
debugmsg('Process SMS')

#List SMS
smsmsgs = sms_list()

totalsms = len(smsmsgs)

#debugmsg('SMS total: %d' % totalsms)

#Go throguh SMS messages
for smsmsgindex in range(0, totalsms):

debugmsg('Message: %d' % smsmsgindex)

#Delete SMS (it is being processed now)
status = sms_delete(smsmsgs[smsmsgindex]['id'])

#If status deleted ok
if (status == TRUE):

#debugmsg('List SMS id: %d, from: %s, msg: %s' % (smsmsgs[smsmsgindex]['id'], smsmsgs[smsmsgindex]['from'], smsmsgs[smsmsgindex]['msg']))

#Split SMS message into parts
smsmsgparts = smsmsgs[smsmsgindex]['msg'].split(' ')

#If at least 2 parts
if (len(smsmsgparts) > 1):

#Check if password valid
if (smsmsgparts[0].lower() == sms_password):

debugmsg('Password valid')

#If position requested
if (smsmsgparts[1].lower() == 'pos') or (smsmsgparts[1].lower() == 'position'):

debugmsg('Action: Position requested')

#If GPS position fix valid
if (gps_status(gpspos) == TRUE):
gpsdataparts = gpspos.split(',')

senddata = 'Lat: ' + gpsdataparts[1] + ', Lon: ' + gpsdataparts[2] + ', Heading: ' + gpsdataparts[6] + ', Speed: ' + gpsdataparts[7] + ' km/hr'

else:
senddata = 'No GPS Fix'

#Send SMS
sms_send(smsmsgs[smsmsgindex]['from'], senddata)

else:
debugmsg('Action: Unknown')

else:

debugmsg('Password invalid')

else:

debugmsg('Unable to delete')



###### SMS Library Functions ######

#Setup SMS
def sms_setup():

debugmsg('Setting up SMS')

MDM.send('AT+CMGF=1\r', 0)
res = MDM.receive(50)#5 sec
MOD.sleep(1)#wait 0.1sec

debugmsg('SMS setup: ' + res)

#List SMS
def sms_list():

#Note: Command will not return anything if SIM is not ready

debugmsg('List SMS')

#MDM.send('AT+CMGL="REC UNREAD"\r', 0) #ALL REC UNREAD STO SENT
MDM.send('AT+CMGL="REC UNREAD"\r', 0)

#smslist = ''
#res = MDM.receive(50)#5 sec
#smslist = smslist + res

#while (res.find('\r\nOK\r\n') == -1):
# res = MDM.receive(10)
# smslist = smslist + res

smslist = ''
res = ''
timeout = MOD.secCounter() + 60
while ( (res.find('\r\nOK\r\n') == -1) and (MOD.secCounter() < timeout) ):
debugmsg('Timeout now: %d timeout: %d' % (MOD.secCounter(), timeout))
res = MDM.receive(50)
smslist = smslist + res
#debugmsg('get %s' % smslist)

MOD.sleep(1)#wait 0.1sec

smsparts = smslist.split('\r\n')

smspartslen = len(smsparts)

#debugmsg('SMS Parts %d' % smspartslen)

smsmsgs = []

if (smspartslen-2 > 0) and (smsparts[smspartslen-2] == 'OK'):

#If there is at least 1 message
if (smspartslen >= 6):

#Go through all messages
for partno in range(1, smspartslen):

#Find out if this is an cmgl line
cmglparts = smsparts[partno].split('CMGL: ')

#If at least 2 parts, leading cmgl and data
if (len(cmglparts) > 1) and (cmglparts[0] == '+') and (partno+1 <= smspartslen):

#debugmsg('Found CMGL %d: %s' % (partno, smsparts[partno]))
#debugmsg('Text %d: %s' % (partno+1, smsparts[partno+1]))

#Split msg info line into parts
msginfoparts = cmglparts[1].split(',')

#Check have all parts
#if (len(msginfoparts) > 5):
if (len(msginfoparts) > 4):

#int() may fail
try:

#Convert id to integer
msginfoparts[0] = int(msginfoparts[0])

#Remove quotes
msginfoparts[2] = msginfoparts[2].replace('"', '')
#msginfoparts[4] = msginfoparts[4].replace('"', '')
#msginfoparts[5] = msginfoparts[5].replace('"', '')

smsmsgs.append({'id': msginfoparts[0], 'from': msginfoparts[2], 'msg': smsparts[partno+1]})

debugmsg('SMS id: %d, from: %s, msg: %s' % (msginfoparts[0], msginfoparts[2], smsparts[partno+1]))

except Exception:
debugmsg('Error CMGL %d: %s' % (partno, smsparts[partno]))

debugmsg('SMS total: %d' % len(smsmsgs))

else:

debugmsg('No SMS messages available')

return smsmsgs

#SMS Delete
def sms_delete(delindex):

debugmsg('SMS Delete: %d' % delindex)

MDM.send('AT+CMGD=' + str(delindex) + '\r', 0)
res = MDM.receive(50)#5 sec
MOD.sleep(1)#wait 0.1sec

if (res == '\r\nOK\r\n'):
status = TRUE
else:
status = FALSE

return status

#SMS Send
def sms_send(to, text):

debugmsg('Send SMS to: %s, MSG: %s' % (to, text))

MDM.send('AT+CMGS="' + to + '"\r', 0)
res = MDM.receive(50)#5 sec
MOD.sleep(1)#wait 0.1sec

#Check for SMS prompt
if (res == '\r\n> '):

#Send SMS message text
MDM.send(text, 0)

#End SMS
MDM.sendbyte(0x1A, 0)
res2 = MDM.receive(180)#5 sec
MOD.sleep(1)#wait 0.1sec

if (res2.find('\r\nOK\r\n') != -1):

debugmsg('SMS sent')

status = TRUE

else:

debugmsg('SMS Send: ' + res2)

debugmsg('Did not get SMS sent confirmation')

status = FALSE

else:

debugmsg('SMS Send: ' + res)

debugmsg('Did not receive SMS prompt')

#Abort SMS (just in case)
MDM.sendbyte(0x1B, 0)
MOD.sleep(1)#wait 0.1sec

status = FALSE

return status



############################## ############################## ######################


###### Init ######

SER.set_speed('115200','8N1')
SER.send('\r\n--------------------\r\n\r\n')

debugmsg('Running...');

#Set verbose error reporting
MDM.send('AT+CMEE=2\r', 0)
MDM.receive(50)#5 sec
MOD.sleep(1)#wait 0.1sec

#May be required in North America / Canada to switch the unit to 900/1900MHz frequency (uncomment if in those areas)
#MDM.send('AT#BND=1\r', 0)
#MDM.receive(1)#0.1sec
#MOD.sleep(1)#wait 0.1sec

gpspos_lastvalid = ''

#Setup SMS
sms_setup()

#Main loop
while 1:

debugmsg('Entering loop')

#Retrieve current position
gpspos = GPS.getActualPosition()

debugmsg('Position: %s' % gpspos)

#Retrieve GPS fix status
gps_statusnow = gps_status(gpspos)

#Save last valid position
#If position fix valid, or none recorded already, use last retrieved
if ( (gps_statusnow == TRUE) or (gpspos_lastvalid == '') ):
gpspos_lastvalid = gpspos

#Check for / process new SMS messages
sms_proceses(gpspos_lastvalid)

debugmsg('Powersave for 10 seconds')

#Powersave for 10 seconds
MOD.powerSaving(10)




Donc, en éspérant que ce petit programme fonctionne, il va falloir ajouter quelques lignes permettant la prise de photo via la petite camera ...

Merci pour votre aide !
fred78000 est déconnecté   Réponse avec citation
Alt Aujourd'hui
Publicité

Beitrag Liens sponsorisés

   
Vieux 26/01/2008, 11h28   #2
 
Date d'inscription: novembre 2003
Messages: 70
Re : Programmation pyton sur "microcontroleur" GM862-GPS (fabrication d'un tracker GPS/GSM)

salut fred78000,

Il te faut aussi les librairies
serial, MOD, MDM, GPS

je te recommande de te rapprocher des spécialistes python.

http://www.developpez.net/forums/forumdisplay.php?f=96.
GlopGlopPasGlop est déconnecté   Réponse avec citation
Vieux 26/01/2008, 11h38   #3
 
Date d'inscription: janvier 2008
Localisation: Paris
Âge: 23
Messages: 92
Re : Programmation pyton sur "microcontroleur" GM862-GPS (fabrication d'un tracker GPS/GSM)

Citation:
Envoyé par GlopGlopPasGlop Voir le message
salut fred78000,

Il te faut aussi les librairies
serial, MOD, MDM, GPS

je te recommande de te rapprocher des spécialistes python.

http://www.developpez.net/forums/forumdisplay.php?f=96.
Merci pour le forum, jvais y poster le même topic
Le gps est intégré au module ( y a juste à rajouter l'antenne )
Sinon, MOD, MDM, c'est du chinois pour moi
fred78000 est déconnecté   Réponse avec citation
Vieux 26/01/2008, 16h44   #4
 
Date d'inscription: juin 2007
Localisation: angouleme france
Âge: 49
Messages: 5 367
Re : Programmation pyton sur "microcontroleur" GM862-GPS (fabrication d'un tracker GPS/GSM)

il y a au debut de ton programme
Citation:
#Use AT command interface
import MDM
importMDM cela veut dire charger la biliotheque MDM pour que le python de base connaisse en plus les commande AT
la ligne de commentaire le rappelle a celui qui veut comprendre :
#Use AT command interface

les lignes de commandes qui commance par MDM ne fonctionneraient pas si il n'y avait pas ce import MDM au debut
MDM.send('AT+CMGF=1\r', 0)
chatelot16 est déconnecté   Réponse avec citation
Vieux 28/01/2008, 19h30   #5
 
Date d'inscription: janvier 2008
Localisation: Paris
Âge: 23
Messages: 92
Re : Programmation pyton sur "microcontroleur" GM862-GPS (fabrication d'un tracker GPS/GSM)

Je remets le programme avec les tabulations:

Code:
##### Config #####

sms_password = 'mypassword'


##### Constants #####

TRUE = 1
FALSE = 0


##### Modules #####

#Use serial
import SER

#Use build in module
import MOD

#Use AT command interface
import MDM

#Use GPS
import GPS


###### General Functions ######

#Debug message
def debugmsg(msgtext):
    msgtext = msgtext.replace('\r', '\\r')
    msgtext = msgtext.replace('\n', '\\n')
    print msgtext
    SER.send(msgtext + '\r\n')
    #f = open('log.txt','ab')
    #f.write(msgtext + '\n')
    #f.close()

#GPS status
def gps_status(gpspos):
    debugmsg('Retrieving GPS status')

    gpspos_parts = gpspos.split(',')

    if ( (gpspos_parts[5] == '2') or (gpspos_parts[5] == '3') ): #2D or 3D fix
        debugmsg('GPS fix "' + gpspos_parts[5] + '" ie valid');
        status = TRUE
    else:
        debugmsg('GPS fix "' + gpspos_parts[5] + '" ie not valid');
        status = FALSE

    return status


###### SMS Process Functions ######

#Process SMS messages
def sms_proceses(gpspos):
    debugmsg('Process SMS')

    #List SMS
    smsmsgs = sms_list()

    totalsms = len(smsmsgs)

    #debugmsg('SMS total: %d' % totalsms)

    #Go throguh SMS messages
    for smsmsgindex in range(0, totalsms):

        debugmsg('Message: %d' % smsmsgindex)

        #Delete SMS (it is being processed now)
        status = sms_delete(smsmsgs[smsmsgindex]['id'])

        #If status deleted ok
        if (status == TRUE):

            #debugmsg('List SMS id: %d, from: %s, msg: %s' % (smsmsgs[smsmsgindex]['id'], smsmsgs[smsmsgindex]['from'], smsmsgs[smsmsgindex]['msg']))

            #Split SMS message into parts
            smsmsgparts = smsmsgs[smsmsgindex]['msg'].split(' ')

            #If at least 2 parts
            if (len(smsmsgparts) > 1):

                #Check if password valid
                if (smsmsgparts[0].lower() == sms_password):

                    debugmsg('Password valid')

                    #If position requested
                    if (smsmsgparts[1].lower() == 'pos') or (smsmsgparts[1].lower() == 'position'):

                        debugmsg('Action: Position requested')

                        #If GPS position fix valid
                        if (gps_status(gpspos) == TRUE):
                            gpsdataparts = gpspos.split(',')

                            senddata = 'Lat: ' + gpsdataparts[1] + ', Lon: ' + gpsdataparts[2] + ', Heading: ' + gpsdataparts[6] + ', Speed: ' + gpsdataparts[7] + ' km/hr'

                        else:
                            senddata = 'No GPS Fix'

                        #Send SMS
                        sms_send(smsmsgs[smsmsgindex]['from'], senddata)

                    else:
                        debugmsg('Action: Unknown')

                else:

                    debugmsg('Password invalid')

        else:

            debugmsg('Unable to delete')



###### SMS Library Functions ######

#Setup SMS
def sms_setup():

    debugmsg('Setting up SMS')

    MDM.send('AT+CMGF=1\r', 0)
    res = MDM.receive(50)#5 sec
    MOD.sleep(1)#wait 0.1sec

    debugmsg('SMS setup: ' + res)

#List SMS
def sms_list():

    #Note: Command will not return anything if SIM is not ready

    debugmsg('List SMS')

    #MDM.send('AT+CMGL="REC UNREAD"\r', 0) #ALL REC UNREAD   STO SENT
    MDM.send('AT+CMGL="REC UNREAD"\r', 0)

    #smslist = ''
    #res = MDM.receive(50)#5 sec
    #smslist = smslist + res

    #while (res.find('\r\nOK\r\n') == -1):
    #    res = MDM.receive(10)
    #    smslist = smslist + res

    smslist = ''
    res = ''
    timeout = MOD.secCounter() + 60
    while ( (res.find('\r\nOK\r\n') == -1) and (MOD.secCounter() < timeout) ):
        debugmsg('Timeout now: %d timeout: %d' % (MOD.secCounter(), timeout))
        res = MDM.receive(50)
        smslist = smslist + res
        #debugmsg('get %s' % smslist)

    MOD.sleep(1)#wait 0.1sec

    smsparts = smslist.split('\r\n')

    smspartslen = len(smsparts)

    #debugmsg('SMS Parts %d' % smspartslen)

    smsmsgs = []

    if (smspartslen-2 > 0) and (smsparts[smspartslen-2] == 'OK'):

        #If there is at least 1 message
        if (smspartslen >= 6):

            #Go through all messages
            for partno in range(1, smspartslen):

                #Find out if this is an cmgl line
                cmglparts = smsparts[partno].split('CMGL: ')

                #If at least 2 parts, leading cmgl and data
                if (len(cmglparts) > 1) and (cmglparts[0] == '+') and (partno+1 <= smspartslen):

                    #debugmsg('Found CMGL %d: %s' % (partno, smsparts[partno]))
                    #debugmsg('Text %d: %s' % (partno+1, smsparts[partno+1]))

                    #Split msg info line into parts
                    msginfoparts = cmglparts[1].split(',')

                    #Check have all parts
                    #if (len(msginfoparts) > 5):
                    if (len(msginfoparts) > 4):

                        #int() may fail
                        try:

                            #Convert id to integer
                            msginfoparts[0] = int(msginfoparts[0])

                            #Remove quotes
                            msginfoparts[2] = msginfoparts[2].replace('"', '')
                            #msginfoparts[4] = msginfoparts[4].replace('"', '')
                            #msginfoparts[5] = msginfoparts[5].replace('"', '')

                            smsmsgs.append({'id': msginfoparts[0], 'from': msginfoparts[2], 'msg': smsparts[partno+1]})

                            debugmsg('SMS id: %d, from: %s, msg: %s' % (msginfoparts[0], msginfoparts[2], smsparts[partno+1]))

                        except Exception:
                            debugmsg('Error CMGL %d: %s' % (partno, smsparts[partno]))

        debugmsg('SMS total: %d' % len(smsmsgs))

    else:

        debugmsg('No SMS messages available')

    return smsmsgs

#SMS Delete
def sms_delete(delindex):

    debugmsg('SMS Delete: %d' % delindex)

    MDM.send('AT+CMGD=' + str(delindex) + '\r', 0)
    res = MDM.receive(50)#5 sec
    MOD.sleep(1)#wait 0.1sec

    if (res == '\r\nOK\r\n'):
        status = TRUE
    else:
        status = FALSE

    return status

#SMS Send
def sms_send(to, text):

    debugmsg('Send SMS to: %s, MSG: %s' % (to, text))

    MDM.send('AT+CMGS="' + to + '"\r', 0)
    res = MDM.receive(50)#5 sec
    MOD.sleep(1)#wait 0.1sec

    #Check for SMS prompt
    if (res == '\r\n> '):

        #Send SMS message text
        MDM.send(text, 0)

        #End SMS
        MDM.sendbyte(0x1A, 0)
        res2 = MDM.receive(180)#5 sec
        MOD.sleep(1)#wait 0.1sec

        if (res2.find('\r\nOK\r\n') != -1):

            debugmsg('SMS sent')

            status = TRUE

        else:

            debugmsg('SMS Send: ' + res2)

            debugmsg('Did not get SMS sent confirmation')

            status = FALSE

    else:

        debugmsg('SMS Send: ' + res)

        debugmsg('Did not receive SMS prompt')

        #Abort SMS (just in case)
        MDM.sendbyte(0x1B, 0)
        MOD.sleep(1)#wait 0.1sec

        status = FALSE

    return status



##################################################################################


###### Init ######

SER.set_speed('115200','8N1')
SER.send('\r\n--------------------\r\n\r\n')

debugmsg('Running...');

#Set verbose error reporting
MDM.send('AT+CMEE=2\r', 0)
MDM.receive(50)#5 sec
MOD.sleep(1)#wait 0.1sec

#May be required in North America / Canada to switch the unit to 900/1900MHz frequency (uncomment if in those areas)
#MDM.send('AT#BND=1\r', 0)
#MDM.receive(1)#0.1sec
#MOD.sleep(1)#wait 0.1sec

gpspos_lastvalid = ''

#Setup SMS
sms_setup()

#Main loop
while 1:

    debugmsg('Entering loop')

    #Retrieve current position
    gpspos = GPS.getActualPosition()

    debugmsg('Position: %s' % gpspos)

    #Retrieve GPS fix status
    gps_statusnow = gps_status(gpspos)

    #Save last valid position
    #If position fix valid, or none recorded already, use last retrieved
    if ( (gps_statusnow == TRUE) or (gpspos_lastvalid == '') ):
        gpspos_lastvalid = gpspos

    #Check for / process new SMS messages
    sms_proceses(gpspos_lastvalid)

    debugmsg('Powersave for 10 seconds')

    #Powersave for 10 seconds
    MOD.powerSaving(10)
fred78000 est déconnecté   Réponse avec citation
Vieux 03/02/2008, 16h06   #6
 
Date d'inscription: janvier 2008
Localisation: Paris
Âge: 23
Messages: 92
Re : Programmation pyton sur "microcontroleur" GM862-GPS (fabrication d'un tracker GPS/GSM)

up !
fred78000 est déconnecté   Réponse avec citation






Réponse

Outils de la discussion
Modes d'affichage

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non

Discussions similaires
Discussion Auteur Forum Réponses Dernier message
[Blanc] Déverrouillage du mode "DEMO ON" sur cuisinière "Scholtès CI 36GW" MILO3 Dépannage 0 28/02/2007 13h35
programmation en "C" microcontrôleur MPS430 bybo Électronique 1 04/05/2006 18h05


Les dernières actualités
11/10 15:13 - Sur Mars, Phoenix est à l'agonie au seuil de l'hiver arctique
11/10 13:05 - La Terre vue de l'espace : l'Europe occidentale sans nuage
11/10 10:52 - Des supraconducteurs nanométriques pour une nouvelle électronique
10/10 16:44 - Une centrale solaire pilote près de Bordeaux
10/10 14:34 - En bref : l'éclairage remplacera-t-il le Wi-Fi ?
10/10 13:33 - L'eau de boisson est-elle polluée par des médicaments ?
10/10 11:31 - Messenger envoie des images inédites de Mercure

Fuseau horaire GMT +2. Il est actuellement 05h24.


Édité par : vBulletin®
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd. Tous droits réservés.