-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathGSM.py
More file actions
128 lines (106 loc) · 2.84 KB
/
GSM.py
File metadata and controls
128 lines (106 loc) · 2.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#!/usr/bin/env python
'''
Library GSM - Rui Pedro Silva; Portugal; 03/2015
'''
import RPi.GPIO as GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
import serial, time
from threading import Thread
class GSM_MODULE:
def __init__(self, pino_pwr, pino_rst, pin, number, message):
self.pino_pwr = pino_pwr
self.pino_rst = pino_rst
self.pin = str(pin)
self.phone_number = str(number)
self.text = message
global last_received
global end_tread
last_received=''
end_tread=1
def init(self): # pode ser usada fora da class
self.power_gsm()
self.ser = serial.Serial('/dev/ttyAMA0', 115200, timeout=5)
self.thread_serial=Thread(target=receiving, args=(self.ser,))
self.thread_serial.start()
error=self.init_gms()
if error==1:
self.reset_gsm()
error=self.init_gms()
if error==1:
return 1;
return 0;
def init_gms(self):
global last_received
global end_tread
self.ser.open()
end_tread=0
time.sleep(1)
self.ser.write('AT\r\n')
time.sleep(1)
#print '1-', last_received
if last_received != 'OK\r\n':
self.ser.close()
return 1;
self.ser.write('AT+CPIN="' + self.pin +'"\r\n')
time.sleep(2)
#print '2-',last_received
if last_received != 'OK\r\n':
self.ser.close()
return 1;
self.ser.close()
return 0;
def power_gsm(self): # pode ser usada fora da class (com cuidado!)
GPIO.setup(self.pino_pwr, GPIO.OUT) # power
GPIO.output(self.pino_pwr, 1)
time.sleep(1)
GPIO.output(self.pino_pwr, 0)
time.sleep(3)
def reset_gsm(self): # pode ser usada fora da class
global end_tread
end_tread=0
self.thread_serial.join()
GPIO.setup(self.pino_rst, GPIO.OUT) # reset
GPIO.output(self.pino_rst, 1)
time.sleep(1)
GPIO.output(self.pino_rst, 0)
time.sleep(3)
self.thread_serial=Thread(target=receiving, args=(self.ser,))
self.thread_serial.start()
def set_phone_number(self, number): # pode ser usada fora da class
self.phone_number = str(number)
def set_text(self, message): # pode ser usada fora da class
self.text = message
def send_sms(self): # pode ser usada fora da class
global last_received
global end_tread
end_tread=1
try:
self.thread_serial.start()
except:
pass;
self.ser.open()
time.sleep(1)
self.ser.write('AT+CMGF=1\r\n')
time.sleep(1)
#print '3-',last_received
self.ser.write('''AT+CMGS="''' + self.phone_number + '''"\r\n''')
time.sleep(1)
for x in self.text:
self.ser.write(x + "\r\n")
time.sleep(1)
self.ser.write('\x1A')
time.sleep(3)
#print '4-',last_received
if last_received != 'OK\r\n':
end_tread=0
self.ser.close()
return 1;
end_tread=0
self.ser.close()
return 0;
def receiving(ser):
global last_received
global end_tread
while end_tread:
last_received = ser.readline()