Raspberry Pi cho SMS và cuộc gọi

Raspberry Pi cho SMS và cuộc gọi

Dự án này trình bày cách chế tạo một chiếc điện thoại di động có chức năng sử dụng Raspberry Pi và mô-đun GSM.

Trong dự án DIY này, chúng ta sẽ xây dựng một chiếc điện thoại di động đơn giản bằng Raspberry Pi, sử dụng mô-đun GSM để thực hiện hoặc nhận cuộc gọi và gửi hoặc đọc tin nhắn SMS. Ngoài ra, điện thoại Raspberry Pi này có micrô và loa để nói chuyện trên điện thoại. Dự án này cũng giúp kết nối đúng mô-đun GSM với Raspberry Pi với tất cả các mã cần thiết để điện thoại hoạt động.

Thiết bị cần thiết:

  • Raspberry Pi 3 (bất kỳ model nào)
  • Mô-đun GSM
  • Màn hình LCD 16x2
  • Bàn phím 4x4 (người dùng có thể sử dụng bàn phím màng)
  • Điện trở 10k ohm
  • Bảng mạch cắm
  • Cáp nối để kết nối
  • Nguồn điện
  • người nói
  • micrô
  • Thẻ SIM
  • người nói
  • Mạch khuếch đại (tùy chọn)

Giải thích cách thức hoạt động:

Trong dự án Điện thoại di động Raspberry Pi này, chúng tôi đã sử dụng mô-đun GSM và Raspberry Pi 3 để điều khiển tất cả các tính năng của hệ thống và kết nối các thiết bị khác nhau trong hệ thống. Bàn phím chữ số 4x4 được sử dụng để nhận mọi loại dữ liệu như nhập số điện thoại, nhập tin nhắn, thực hiện cuộc gọi, nhận cuộc gọi, gửi SMS, đọc SMS, v.v. Mô-đun GSM SIM900A được sử dụng để giao tiếp với mạng để thực hiện cuộc gọi và gửi tin nhắn. Ngoài ra, chúng tôi đã kết nối micrô và loa để quay số bằng giọng nói và đổ chuông. Màn hình LCD 16x2 được sử dụng để hiển thị tin nhắn, hướng dẫn và thông báo.

Chữ số và số là phương pháp nhập cả số và chữ cái bằng cùng một bàn phím. Trong phương pháp này, chúng tôi đã kết nối bàn phím 4x4 với Raspberry Pi và viết mã để hỗ trợ nhập chữ cái. Xem mã trong đoạn mã bên dưới.

Hoạt động của dự án này rất đơn giản. Tất cả các tính năng được triển khai bằng bàn phím chữ số. Xem mã đầy đủ và video demo bên dưới để hiểu đúng các bước. Sau đây chúng tôi sẽ giải thích tất cả bốn tính năng của dự án như sau:

Giải thích về 4 tính năng của điện thoại di động Raspberry Pi:

1. Gọi:

Để thực hiện cuộc gọi bằng điện thoại được thực hiện trên Raspberry Pi, chúng ta cần nhấn nút 'C' rồi nhập số điện thoại chúng ta muốn gọi. Số điện thoại được nhập bằng bàn phím chữ số. Sau khi nhập số, chúng ta cần nhấn nút 'C' một lần nữa. Sau đó, Raspberry Pi sẽ tiến hành kết nối cuộc gọi đến số đã nhập bằng lệnh AT:

ATDxxxxxxxxxx; <Enter>     where xxxxxxxxx is entered Mobile Number.

2. Trả lời cuộc gọi:

Trả lời cuộc gọi rất dễ dàng, khi ai đó gọi đến số SIM của hệ thống nằm trên mô-đun GSM, hệ thống của bạn sẽ hiển thị thông báo 'Incoming…' trên màn hình LCD với số của người gọi. Bây giờ chúng ta phải nhấn nút 'A' để trả lời cuộc gọi. Khi nhấn nút 'A', Raspberry Pi sẽ gửi các lệnh đã cho đến mô-đun GSM:

ATA <enter>

3. Gửi tin nhắn SMS:

Khi chúng ta muốn gửi tin nhắn SMS bằng điện thoại được làm từ Raspberry Pi, chúng ta phải nhấn nút 'D' và sau đó nó sẽ hỏi số người nhận, có nghĩa là "Bạn muốn gửi tin nhắn SMS cho ai?". Sau khi nhập số, chúng ta phải nhấn nút 'D' một lần nữa và màn hình LCD sẽ yêu cầu tin nhắn. Bây giờ chúng ta phải nhập tin nhắn mà chúng ta muốn gửi bằng bàn phím giống như khi nhập trên điện thoại di động thông thường. Và sau khi nhập tin nhắn, chúng ta phải nhấn nút 'D' một lần nữa để gửi tin nhắn SMS. Để gửi tin nhắn SMS, Raspberry Pi sẽ gửi các lệnh đã cho đến mô-đun GSM:

AT+CMGF=1 <enter>
AT+CMGS=”xxxxxxxxxx” <enter>     where: xxxxxxxxxx is entered mobile number

và gửi lệnh 26 đến mô-đun GSM để gửi tin nhắn SMS.

4. Nhận và đọc tin nhắn SMS:

Tính năng này cũng đơn giản. Trong trường hợp này, mô-đun GSM nhận tin nhắn SMS và lưu trữ trong thẻ SIM, và Raspberry Pi liên tục theo dõi tín hiệu tiếp nhận tin nhắn SMS thông qua UART. Khi có tin nhắn mới, màn hình LCD sẽ hiển thị “Tin nhắn mới”, sau đó chúng ta phải nhấn nút 'B' để đọc tin nhắn SMS. Tín hiệu tiếp nhận tin nhắn SMS là:

+CMTI: “SM”,6  Where 6 is message location where it stored in SIM card.

Khi Raspberry Pi nhận được tín hiệu 'SMS received', nó sẽ lấy dữ liệu vị trí của SMS và gửi lệnh đến mô-đun GSM để đọc SMS đã nhận. Sau đó, nó sẽ hiển thị thông báo 'New Message' trên LCD.

AT+CMGR=<SMS stored location><enter>

Khi GSM gửi tin nhắn đã lưu trữ đến Raspberry Pi, Raspberry Pi sẽ lấy nội dung chính của tin nhắn SMS và hiển thị trên màn hình LCD.

Lưu ý: Không có mã nào được viết cho micrô và loa trong dự án này.

Vui lòng kiểm tra toàn bộ mã bên dưới để hiểu đúng toàn bộ quy trình.

Mạch điện và mô tả:

Các chân của LCD 16x2 RS, EN, D4, D5, D6 và D7 được kết nối với các chân GPIO 18, 23, 24, 25, 8 và 7 của Raspberry Pi. Các chân Rx và Tx của mô-đun GSM được kết nối trực tiếp với các chân Tx và Rx của Raspberry Pi tương ứng (phải kết nối Đất của Raspberry Pi và GSM). Các chân hàng của bàn phím 4x4 R1, R2, R3, R4 được kết nối trực tiếp với các chân GPIO 12, 16, 20, 21 của Raspberry Pi và các chân cột của bàn phím C1, C2, C3, C4 được kết nối với các chân GPIO 26, 19, 13 và 6 của Raspberry Pi. MIC được kết nối trực tiếp với mic+ và mic- của Mô-đun GSM và loa được kết nối với các chân sp+ và sp- của Mô-đun GSM. Sử dụng Mạch khuếch đại âm thanh để tăng âm lượng đầu ra của âm thanh. Mạch khuếch đại âm thanh này là một phụ kiện tùy chọn. Và loa có thể được kết nối trực tiếp với mô-đun GSM mà không cần sử dụng mạch khuếch đại.

Mô tả chương trình:

Mô tả chương trình: Chương trình điện thoại di động Raspberry Pi này có thể khá phức tạp đối với người mới bắt đầu. Chúng tôi sẽ sử dụng ngôn ngữ Python để viết chương trình này. Nếu bạn là người mới bắt đầu sử dụng Raspberry Pi, bạn nên đọc các hướng dẫn trước về cách bắt đầu sử dụng Raspberry Pi và cài đặt cũng như cấu hình Raspbian Jessie OS trên Raspberry Pi.

Trong mã này, chúng tôi đã tạo một hàm def keypad(): để kết nối với bàn phím được sử dụng để nhập số và để nhập chữ cái, chúng tôi đã tạo một hàm def alphaKeypad():, giúp bàn phím đó cũng có thể được sử dụng để nhập chữ cái. Bây giờ chúng tôi đã tạo bàn phím này có nhiều chức năng giống như thư viện bàn phím trong Arduino, sử dụng bàn phím này, chúng ta có thể nhập chữ cái và số chỉ bằng 10 nút.

Ví dụ, nếu nhấn nút 2 (abc2), nó sẽ hiển thị 'a', và nếu nhấn lại, nó sẽ đổi 'a' thành 'b', và nếu nhấn lại, nó sẽ đổi thành 'c' ở cùng vị trí trên LCD. Nếu giữ nguyên trong một thời gian dài sau khi nhấn nút, con trỏ sẽ tự động di chuyển đến vị trí tiếp theo trên LCD, cho phép nhập chữ cái hoặc số tiếp theo. Phương pháp này cũng được sử dụng cho các phím khác.

def keypad():
   for j in range(4):
     gpio.setup(COL[j], gpio.OUT)
     gpio.output(COL[j], 0)
     ch=0
     for i in range(4):
       if gpio.input(ROW[i])==0:
         ch=MATRIX[i][j]
         return ch
         while (gpio.input(ROW[i]) == 0):
           pass
     gpio.output(COL[j],1)
def alphaKeypad():
    lcdclear()
    setCursor(x,y)
    lcdcmd(0x0f)
    msg=""
    while 1:
        key=0
        count=0
        key=keypad()
        if key == '1':
            ind=0
            maxInd=6
            Key='1'
            getChar(Key, ind, maxInd)
            .... .....
            ..... .....

Trước hết, trong tập lệnh Python này, chúng tôi đã đưa vào các thư viện cần thiết và định nghĩa các chân cho LCD, bàn phím và các thành phần khác như sau:

import RPi.GPIO as gpio
import serial
import time

msg=""
alpha="1!@.,:?ABC2DEF3GHI4JKL5MNO6PQRS7TUV8WXYZ90 *#"
x=0
y=0

MATRIX = [
            ['1','2','3','A'],
            ['4','5','6','B'],
            ['7','8','9','C'],
            ['*','0','#','D']
         ]
ROW = [21,20,16,12]
COL = [26,19,13,6]
... .....
..... .....

Bây giờ là lúc xác định hướng của các chân:

gpio.setwarnings(False)
gpio.setmode(gpio.BCM)
gpio.setup(RS, gpio.OUT)
gpio.setup(EN, gpio.OUT)
gpio.setup(D4, gpio.OUT)
gpio.setup(D5, gpio.OUT)
gpio.setup(D6, gpio.OUT)
gpio.setup(D7, gpio.OUT)
gpio.setup(led, gpio.OUT)
gpio.setup(buz, gpio.OUT)
gpio.setup(m11, gpio.OUT)
gpio.setup(m12, gpio.OUT)
gpio.setup(button, gpio.IN)
gpio.output(led , 0)
gpio.output(buz , 0)
gpio.output(m11 , 0)
gpio.output(m12 , 0)

Sau đó bắt đầu giao tiếp nối tiếp như sau:

Serial = serial.Serial("/dev/ttyS0", baudrate=9600, timeout=2)

Bây giờ chúng ta cần viết một số hàm để điều khiển LCD. Hàm def lcdcmd(ch): được sử dụng để gửi lệnh đến LCD và hàm def lcdwrite(ch): được sử dụng để gửi dữ liệu đến LCD cùng với các hàm khác: def lcdclear(): được sử dụng để xóa dữ liệu hiển thị trên LCD def setCursor(x, y): được sử dụng để thiết lập vị trí của con trỏ trên LCD def lcdprint(Str): được sử dụng để in một văn bản (Chuỗi) trên LCD.

def lcdcmd(ch): 
  gpio.output(RS, 0)
  gpio.output(D4, 0)
  gpio.output(D5, 0)
  gpio.output(D6, 0)
  gpio.output(D7, 0)
  if ch&0x10==0x10:
    gpio.output(D4, 1)
    .... .....
    ..... ....

def lcdwrite(ch): 
  gpio.output(RS, 1)
  gpio.output(D4, 0)
  gpio.output(D5, 0)
  gpio.output(D6, 0)
  gpio.output(D7, 0)
  if ch&0x10==0x10:
    gpio.output(D4, 1)
  if ch&0x20==0x20:
    gpio.output(D5, 1)
    .... .....
    ..... ....

def lcdclear():
  lcdcmd(0x01)
 
def lcdprint(Str):
  l=0;
  l=len(Str)
  for i in range(l):
    lcdwrite(ord(Str[i]))
def setCursor(x,y):
    if y == 0:
        n=128+x
    elif y == 1:
        n=192+x
    lcdcmd(n)

Sau đó chúng ta sẽ cần viết một số hàm để gửi SMS, nhận SMS, thực hiện cuộc gọi và nhận cuộc gọi.

Hàm def call() được sử dụng để thực hiện cuộc gọi, hàm def receiveCall(data) được sử dụng để hiển thị tin nhắn và số người gọi trên màn hình LCD, trong khi hàm def attendCall() được sử dụng để nhận cuộc gọi đến.

Hàm def sendSMS() được sử dụng để viết và gửi tin nhắn bằng hàm alphaKeypad() để nhận tin nhắn từ người dùng, và hàm def receiveSMS(data) được sử dụng để nhận và truy xuất vị trí của tin nhắn SMS từ thẻ SIM, trong khi hàm def readSMS(index) được sử dụng để hiển thị tin nhắn trên màn hình LCD.

Bạn có thể tìm thấy tất cả các chức năng trong mã bên dưới.

Sau đây là cách bạn có thể biến Raspberry Pi thành điện thoại di động bằng cách sử dụng mô-đun GSM.

Tất cả mã dự án

import RPi.GPIO as gpio
import serial
import time
msg=""
#     0      7   11  15  19  23  27   32  36   414244   ROLL45
alpha="1!@.,:?ABC2DEF3GHI4JKL5MNO6PQRS7TUV8WXYZ90 *#"
x=0
y=0
MATRIX = [
            ['1','2','3','A'],
            ['4','5','6','B'],
            ['7','8','9','C'],
            ['*','0','#','D']
         ]
ROW = [21,20,16,12]
COL = [26,19,13,6]
moNum=['0','0','0','0','0','0','0','0','0','0']
m11=17
m12=27
led=5
buz=26
button=19
RS =18
EN =23
D4 =24
D5 =25
D6 =8
D7 =7
HIGH=1
LOW=0
gpio.setwarnings(False)
gpio.setmode(gpio.BCM)
gpio.setup(RS, gpio.OUT)
gpio.setup(EN, gpio.OUT)
gpio.setup(D4, gpio.OUT)
gpio.setup(D5, gpio.OUT)
gpio.setup(D6, gpio.OUT)
gpio.setup(D7, gpio.OUT)
gpio.setup(led, gpio.OUT)
gpio.setup(buz, gpio.OUT)
gpio.setup(m11, gpio.OUT)
gpio.setup(m12, gpio.OUT)
gpio.setup(button, gpio.IN)
gpio.output(led , 0)
gpio.output(buz , 0)
gpio.output(m11 , 0)
gpio.output(m12 , 0)
for j in range(4):
    gpio.setup(COL[j], gpio.OUT)
    gpio.setup(COL[j],1)
for i in range (4):
    gpio.setup(ROW[i],gpio.IN,pull_up_down=gpio.PUD_UP)
Serial = serial.Serial("/dev/ttyS0", baudrate=9600, timeout=2)
data=""
def begin():
  lcdcmd(0x33) 
  lcdcmd(0x32) 
  lcdcmd(0x06)
  lcdcmd(0x0C) 
  lcdcmd(0x28) 
  lcdcmd(0x01) 
  time.sleep(0.0005)
def lcdcmd(ch): 
  gpio.output(RS, 0)
  gpio.output(D4, 0)
  gpio.output(D5, 0)
  gpio.output(D6, 0)
  gpio.output(D7, 0)
  if ch&0x10==0x10:
    gpio.output(D4, 1)
  if ch&0x20==0x20:
    gpio.output(D5, 1)
  if ch&0x40==0x40:
    gpio.output(D6, 1)
  if ch&0x80==0x80:
    gpio.output(D7, 1)
  gpio.output(EN, 1)
  time.sleep(0.005)
  gpio.output(EN, 0)
  # Low bits
  gpio.output(D4, 0)
  gpio.output(D5, 0)
  gpio.output(D6, 0)
  gpio.output(D7, 0)
  if ch&0x01==0x01:
    gpio.output(D4, 1)
  if ch&0x02==0x02:
    gpio.output(D5, 1)
  if ch&0x04==0x04:
    gpio.output(D6, 1)
  if ch&0x08==0x08:
    gpio.output(D7, 1)
  gpio.output(EN, 1)
  time.sleep(0.005)
  gpio.output(EN, 0)
def lcdwrite(ch): 
  gpio.output(RS, 1)
  gpio.output(D4, 0)
  gpio.output(D5, 0)
  gpio.output(D6, 0)
  gpio.output(D7, 0)
  if ch&0x10==0x10:
    gpio.output(D4, 1)
  if ch&0x20==0x20:
    gpio.output(D5, 1)
  if ch&0x40==0x40:
    gpio.output(D6, 1)
  if ch&0x80==0x80:
    gpio.output(D7, 1)
  gpio.output(EN, 1)
  time.sleep(0.005)
  gpio.output(EN, 0)
  # Low bits
  gpio.output(D4, 0)
  gpio.output(D5, 0)
  gpio.output(D6, 0)
  gpio.output(D7, 0)
  if ch&0x01==0x01:
    gpio.output(D4, 1)
  if ch&0x02==0x02:
    gpio.output(D5, 1)
  if ch&0x04==0x04:
    gpio.output(D6, 1)
  if ch&0x08==0x08:
    gpio.output(D7, 1)
  gpio.output(EN, 1)
  time.sleep(0.005)
  gpio.output(EN, 0)
def lcdclear():
  lcdcmd(0x01)
def lcdprint(Str):
  l=0;
  l=len(Str)
  for i in range(l):
    lcdwrite(ord(Str[i]))
def setCursor(x,y):
    if y == 0:
        n=128+x
    elif y == 1:
        n=192+x
    lcdcmd(n)
def keypad():
   for j in range(4):
     gpio.setup(COL[j], gpio.OUT)
     gpio.output(COL[j], 0)
     ch=0
     for i in range(4):
       if gpio.input(ROW[i])==0:
         ch=MATRIX[i][j]
         #lcdwrite(ord(ch))
        # print "Key Pressed:",ch
        # time.sleep(2)
         return ch
         while (gpio.input(ROW[i]) == 0):
           pass
     gpio.output(COL[j],1)
    # callNum[n]=ch
def serialEvent():
    data = Serial.read(20)
    #if data != '\0':
    print data
    data=""
def gsmInit():
    lcdclear()
    lcdprint("Finding Module");
    time.sleep(1)
    while 1:
        data=""
        Serial.write("AT\r");
        data=Serial.read(10)
        print data
        r=data.find("OK")
        if r>=0:
            break
        time.sleep(0.5)
    while 1:
        data=""
        Serial.write("AT+CLIP=1\r");
        data=Serial.read(10)
        print data
        r=data.find("OK")
        if r>=0:
            break
        time.sleep(0.5)
    lcdclear()
    lcdprint("Finding Network")
    time.sleep(1)
    while 1:
        data=""
        Serial.flush()
        Serial.write("AT+CPIN?\r");
        data=Serial.read(30)
        print data
        r=data.find("READY")
        if r>=0:
            break
        time.sleep(0.5)
    lcdclear()
    lcdprint("Finding Operator")
    time.sleep(1)
    while 1:
        data=""
        Serial.flush()
        Serial.read(20)
        Serial.write("AT+COPS?\r");
        data=Serial.read(40)
        #print data
        r=data.find("+COPS:")
        if r>=0:
            l1=data.find(",\"")+2
            l2=data.find("\"\r")
            operator=data[l1:l2]
            lcdclear()
            lcdprint(operator)
            time.sleep(3)
            print operator
            break;
        time.sleep(0.5)
    Serial.write("AT+CMGF=1\r");
    time.sleep(0.5)
   # Serial.write("AT+CNMI=2,2,0,0,0\r");
   # time.sleep(0.5)
    Serial.write("AT+CSMP=17,167,0,0\r");
    time.sleep(0.5)
def receiveCall(data):
        inNumber=""
        r=data.find("+CLIP:")
        if r>0:
            inNumber=""
            inNumber=data[r+8:r+21]
            lcdclear()
            lcdprint("incoming")
            setCursor(0,1)
            lcdprint(inNumber)
            time.sleep(1)
            return 1
def receiveSMS(data):
    print data
    r=data.find("\",")
    print r
    if r>0:
        if data[r+4] == "\r":
            smsNum=data[r+2:r+4]
        elif data[r+3] == "\r":
            smsNum=data[r+2]
        elif data[r+5] == "\r":
            smsNum=data[r+2:r+5]
        else:
            print "else"
        print smsNum
        if r>0:
            lcdclear()
            lcdprint("SMS Received")
            setCursor(0,1)
            lcdprint("Press Button B")
            print "AT+CMGR="+smsNum+"\r"
            time.sleep(2)
            return str(smsNum)
    else:
        return 0
def attendCall():
    print "Attend call"
    Serial.write("ATA\r")
    data=""
    data=Serial.read(10)
    l=data.find("OK")
    if l>=0:
        lcdclear()
        lcdprint("Call attended")
        time.sleep(2)
        flag=-1;
        while flag<0:
            data=Serial.read(12);
            print data
            flag=data.find("NO CARRIER")
            #flag=data.find("BUSY")
            print flag
        lcdclear()
        lcdprint("Call Ended")
        time.sleep(1)
        lcdclear()
def readSMS(index):
                print index
                Serial.write("AT+CMGR="+index+"\r")
                data=""
                data=Serial.read(200)
                print data
                r=data.find("OK")
                if r>=0:
                    r1=data.find("\"\r\n")
                    msg=""
                    msg=data[r1+3:r-4]
                    lcdclear()
                    lcdprint(msg)
                    print msg
                    time.sleep(5)
                    lcdclear();
                    smsFlag=0
                    print "Receive SMS"
def getChar(Key, ind, maxInd):
            ch=0
            ch=ind
            lcdcmd(0x0e)
            Char=''
            count=0
            global msg
            global x
            global y
            while count<20:
                key=keypad()
                print key
                if key== Key:
                    setCursor(x,y)
                    Char=alpha[ch]
                    lcdwrite(ord(Char))
                    ch=ch+1
                    if ch>maxInd:
                        ch=ind
                    count=0
                count=count+1
                time.sleep(0.1)
            msg+=Char
            x=x+1
            if x>15:
                x=0
                y=1
            lcdcmd(0x0f)
def alphaKeypad():
    lcdclear()
    setCursor(x,y)
    lcdcmd(0x0f)
    msg=""
    while 1:
        key=0
        count=0
        key=keypad()
        if key == '1':
            ind=0
            maxInd=6
            Key='1'
            getChar(Key, ind, maxInd)
        elif key == '2':
            ind=7
            maxInd=10
            Key='2'
            getChar(Key, ind, maxInd)
        elif key == '3':
            ind=11
            maxInd=14
            Key='3'
            getChar(Key, ind, maxInd)
        elif key == '4':
            ind=15
            maxInd=18
            Key='4'
            getChar(Key, ind, maxInd)
        elif key == '5':
            ind=19
            maxInd=22
            Key='5'
            getChar(Key, ind, maxInd)
        elif key == '6':
            ind=23
            maxInd=26
            Key='6'
            getChar(Key, ind, maxInd)
        elif key == '7':
            ind=27
            maxInd=31
            Key='7'
            getChar(Key, ind, maxInd)
        elif key == '8':
            ind=32
            maxInd=35
            Key='8'
            getChar(Key, ind, maxInd)
        elif key == '9':
            ind=36
            maxInd=40
            Key='9'
            getChar(Key, ind, maxInd)
        elif key == '0':
            ind=41
            maxInd=42
            Key='0'
            getChar(Key, ind, maxInd)
        elif key == '*':
            ind=43
            maxInd=43
            Key='*'
            getChar(Key, ind, maxInd)
        elif key == '#':
            ind=44
            maxInd=44
            Key='#'
            getChar(Key, ind, maxInd)
        elif key== 'D':
            return
def sendSMS():
    print"Sending sms"
    lcdclear()
    lcdprint("Enter Number:")
    setCursor(0,1)
    time.sleep(2)
    moNum=""
    while 1:
        key=0;
        key=keypad()
        #print key
        if key>0:
            if key == 'A'  or key== 'B' or key== 'C':
                print key
                return
            elif key == 'D':
                print key
                print moNum
                Serial.write("AT+CMGF=1\r")
                time.sleep(1)
                Serial.write("AT+CMGS=\"+91"+moNum+"\"\r")
                time.sleep(2)
                data=""
                data=Serial.read(60)
                print data
                alphaKeypad()
                print msg
                lcdclear()
                lcdprint("Sending.....")
                Serial.write(msg)
                time.sleep(1)
                Serial.write("\x1A")
                while 1:
                    data=""
                    data=Serial.read(40)
                    print data
                    l=data.find("+CMGS:")
                    if l>=0:
                        lcdclear()
                        lcdprint("SMS Sent.")
                        time.sleep(2)
                        return;
                    l=data.find("Error")
                    if l>=0:
                        lcdclear()
                        lcdprint("Error")
                        time.sleep(1)
                        return
            else:
                print key
                moNum+=key
                lcdwrite(ord(key))
                time.sleep(0.5)
def call():
    print "Call"
    n=0
    moNum=""
    lcdclear()
    lcdprint("Enter Number:")
    setCursor(0,1)
    time.sleep(2)
    while 1:
        key=0;
        key=keypad()
        #print key
        if key>0:
            if key == 'A'  or key== 'B' or key== 'D':
                print key
                return
            elif key == 'C':
                print key
                print moNum
                Serial.write("ATD+91"+moNum+";\r")
                data=""
                time.sleep(2)
                data=Serial.read(30)
                l=data.find("OK")
                if l>=0:
                    lcdclear()
                    lcdprint("Calling.....")
                    setCursor(0,1)
                    lcdprint("+91"+moNum)
                    time.sleep(30)
                    lcdclear()
                    return
                #l=data.find("Error")
                #if l>=0:
                else:
                    lcdclear()
                    lcdprint("Error")
                    time.sleep(1)
                    return
            else:
                print key
                moNum+=key
                lcdwrite(ord(key))
                n=n+1
                time.sleep(0.5)
begin()
lcdcmd(0x01)
lcdprint("  Mobile Phone  ")
lcdcmd(0xc0)
lcdprint("    Using RPI     ")
time.sleep(3)
lcdcmd(0x01)
lcdprint("Circuit Digest")
lcdcmd(0xc0)
lcdprint("Welcomes you")
time.sleep(3)
gsmInit()
smsFlag=0
index=""
while 1:
    key=0
    key=keypad()
    print key
    if key == 'A':
      attendCall()
    elif key == 'B':
      readSMS(index)
      smsFlag=0
    elif key == 'C':
      call()
    elif key == 'D':
      sendSMS()
    data=""
    Serial.flush()
    data=Serial.read(150)
    print data
    l=data.find("RING")
    if l>=0:
      callstr=data
      receiveCall(data)
    l=data.find("\"SM\"")
    if l>=0:
      smsstr=data
      smsIndex=""
      (smsIndex)=receiveSMS(smsstr)
      print smsIndex
      if smsIndex>0:
          smsFlag=1
          index=smsIndex
    if smsFlag == 1:
        lcdclear()
        lcdprint("New Message")
        time.sleep(1)
    setCursor(0,0)
    lcdprint("C--> Call <--A");
    setCursor(0,1);
    lcdprint("D--> SMS  <--B")

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

Win a Raspberry Pi!

Answer 5 questions for your chance to win!
Question 1

What color is the sky?

Tìm kiếm bằng danh mục

Chọn danh mục