Arduino NBduino Library
NBduinoLibrary.cpp
Go to the documentation of this file.
1 
12 #include <arduino.h>
13 #include <NBduinoLibrary.h>
14 
15 static SoftwareSerial mySerial(10, 11); //RX, TX
16 
17 clean()
18 {
19  char buffer[200];
20  int len;
21  mySerial.setTimeout(1000);
22  while(1)
23  {
24  len=mySerial.readBytes(buffer,100);
25  if(len == 0) return;
26  }
27 }
28 
29 getIMEI(char *imei)
30 {
31  char buffer[200];
32  int len;
33  int i,j;
34  j=0;
35  while(1)
36  {
37  len=mySerial.readBytesUntil('\n', buffer, 100);
38  for(i=0; i<len; i++) if((buffer[i] >= '0') && (buffer[i] <= '9')) imei[j++]=buffer[i];
39  if(strstr(buffer,"OK") != NULL)
40  {
41  imei[j]=0;
42  return;
43  }
44  };
45 }
46 
47 sync()
48 {
49  char buffer[200];
50  while(1)
51  {
52  mySerial.readBytesUntil('\n', buffer, 100);
53  if(strstr(buffer,"OK") != NULL) return;
54  };
55 }
56 
63 {
64 }
65 
75 NBduino::NBduino(const String mqttServer, const int mqttPort, const String mqttUser, const String mqttPassword)
76 {
77  _mqttServer=mqttServer;
78  _mqttPort=mqttPort;
79  _mqttUser=mqttUser;
80  _mqttPassword=mqttPassword;
81  _timeToConn=120000;
82 }
83 
94 NBduino::NBduino(const String mqttServer, const int mqttPort, const String mqttUser, const String mqttPassword, unsigned long timeToConn)
95 {
96  _mqttServer=mqttServer;
97  _mqttPort=mqttPort;
98  _mqttUser=mqttUser;
99  _mqttPassword=mqttPassword;
100  _timeToConn=timeToConn;
101 }
102 
109 NBduino::setAPN(String APN)
110 {
111  mySerial.print("AT*MCGDEFCONT=");
112  mySerial.print("\"");
113  mySerial.print("IP");
114  mySerial.print("\"");
115  mySerial.print(",");
116  mySerial.print("\"");
117  mySerial.print(APN);
118  mySerial.println("\"");
119  delay(500);
120  mySerial.print("AT+CGDCONT=1,");
121  mySerial.print("\"");
122  mySerial.print("IP");
123  mySerial.print("\"");
124  mySerial.print(",");
125  mySerial.print("\"");
126  mySerial.print(APN);
127  mySerial.print("\"");
128  mySerial.print(",");
129  mySerial.print("\"");
130  mySerial.print("\"");
131  mySerial.println(",0,0,0,,,,,,0,,0");
132  delay(500);
133  mySerial.println("AT+CEREG=5");
134  delay(500);
135  mySerial.println("AT+COPS=?");
136 }
137 
144 {
145  wakeup();
146  mySerial.begin(4800);
147  clean();
148  mySerial.println("AT+CPIN?");
149  sync();
150  clean();
151  mySerial.println("AT+CSQ");
152  sync();
153  clean();
154  mySerial.println("AT+CGREG?");
155  sync();
156  clean();
157  mySerial.println("AT+CGACT?");
158  sync();
159  clean();
160  mySerial.println("AT+COPS?");
161  sync();
162  clean();
163  mySerial.println("AT+CGCONTRDP");
164  sync(); //delay(1500);
165 }
166 
173 {
174  digitalWrite(_reset, LOW);
175  digitalWrite(_pwrkey, HIGH);
176  delay(2000);
177  digitalWrite(_pwrkey, LOW);
178 }
179 
186 {
187  digitalWrite(_pwrkey, HIGH);
188  delay(2000);
189  digitalWrite(_pwrkey, LOW);
190 }
191 
199 NBduino::publish(const String topic, const String value)
200 {
201  char command[200];
202  sprintf(command,"AT+CMQPUB=0,\"%s\",1,0,0,%d,\"%s\"",topic.c_str(), value.length(), value.c_str());
203  clean();
204  mySerial.println(command);
205  sync();
206 }
207 
214 NBduino::connect(const String clientname)
215 {
216  char command[200];
217  sprintf(command,"AT+CMQNEW=\"%s\",\"%d\",12000,100",_mqttServer.c_str(),_mqttPort);
218  clean();
219  mySerial.println(command);
220  sync();
221  sprintf(command,"AT+CMQCON=0,3,\"%s\",600,0,0,\"%s\",\"%s\"", clientname.c_str(), _mqttUser.c_str(), _mqttPassword.c_str());
222  clean();
223  mySerial.println(command);
224  sync();
225  clean();
226  mySerial.println("AT+CREVHEX=0");
227  sync();
228  digitalWrite(_led, HIGH); //LED OFF
229 }
230 
237 {
238  clean();
239  mySerial.println("AT+CMQDISCON=0");
240  sync();
241  digitalWrite(_led, LOW); //LED OFF
242 }
243 
250 {
251  char aMessage[200];
252  unsigned int messageSize;
253  char cha;
254  aMessage[0] = 0;
255  messageSize = 0; // set message size to zero
256  delay(4000);
257  mySerial.flush();
258  clean();
259  mySerial.println("AT+GSN");
260  getIMEI(aMessage);
261  String exString = aMessage;
262  return aMessage;
263 }
setAPN(String APN)
bool begin()
contains the NBduino class definition and the include file that the class implementation needs...
publish(const String topic, const String value)
connect(const String clientname)
String reqIMEI()