@@ -42,133 +42,175 @@ int interval = 1000; // interval between sends
4242
4343void WIFISetUp (void )
4444{
45- // Set WiFi to station mode and disconnect from an AP if it was previously connected
46- WiFi.disconnect (true );
47- delay (100 );
48- WiFi.mode (WIFI_STA);
49- WiFi.setAutoConnect (true );
50- WiFi.begin (" Your WiFi SSID" ," Your Password" );// fill in "Your WiFi SSID","Your Password"
51- delay (100 );
52- Heltec.display ->clear ();
53-
54- byte count = 0 ;
55- while (WiFi.status () != WL_CONNECTED && count < 10 )
56- {
57- count ++;
58- delay (500 );
59- Heltec.display ->drawString (0 , 0 , " Connecting..." );
60- Heltec.display ->display ();
61- }
45+ // Set WiFi to station mode and disconnect from an AP if it was previously connected
46+ WiFi.disconnect (true );
47+ delay (100 );
48+ WiFi.mode (WIFI_STA);
49+ WiFi.setAutoConnect (true );
50+ WiFi.begin (" Your WiFi SSID" ," Your Password" );// fill in "Your WiFi SSID","Your Password"
51+ delay (100 );
52+ Heltec.display ->clear ();
53+
54+ byte count = 0 ;
55+ while (WiFi.status () != WL_CONNECTED && count < 10 )
56+ {
57+ count ++;
58+ delay (500 );
59+ Heltec.display ->drawString (0 , 0 , " Connecting..." );
60+ Heltec.display ->display ();
61+ }
6262 // Heltec.display->clear();
63- if (WiFi.status () == WL_CONNECTED)
64- {
65- // Heltec.display->drawString(35, 38, "WIFI SETUP");
66- Heltec.display ->drawString (0 , 9 , " OK" );
67- Heltec.display ->display ();
68- delay (1000 );
69- Heltec.display ->clear ();
70- }
71- else
72- {
73- // Heltec.display->clear();
74- Heltec.display ->drawString (0 , 9 , " Failed" );
75- Heltec.display ->display ();
76- delay (1000 );
77- Heltec.display ->clear ();
78- }
63+ if (WiFi.status () == WL_CONNECTED)
64+ {
65+ // Heltec.display->drawString(35, 38, "WIFI SETUP");
66+ Heltec.display ->drawString (0 , 9 , " OK" );
67+ Heltec.display ->display ();
68+ delay (1000 );
69+ Heltec.display ->clear ();
70+ }
71+ else
72+ {
73+ // Heltec.display->clear();
74+ Heltec.display ->drawString (0 , 9 , " Failed" );
75+ Heltec.display ->display ();
76+ delay (1000 );
77+ Heltec.display ->clear ();
78+ }
7979}
8080
8181void WIFIScan (unsigned int value)
8282{
83- unsigned int i;
84- WiFi.mode (WIFI_MODE_NULL);
85- for (i=0 ;i<value;i++)
86- {
87- Heltec.display ->drawString (0 , 0 , " Scan start..." );
88- Heltec.display ->display ();
89-
90- int n = WiFi.scanNetworks ();
91- Heltec.display ->drawString (0 , 9 , " Scan done" );
92- Heltec.display ->display ();
93- delay (500 );
94- Heltec.display ->clear ();
95-
96- if (n == 0 )
97- {
98- Heltec.display ->clear ();
99- Heltec.display ->drawString (0 , 18 , " no network found" );
100- Heltec.display ->display ();
101- while (1 );
102- }
103- else
104- {
105- Heltec.display ->drawString (0 , 18 , (String)n + " nets found" );
106- Heltec.display ->display ();
107- delay (2000 );
108- Heltec.display ->clear ();
109- }
110- }
83+ unsigned int i;
84+ if (WiFi.status () != WL_CONNECTED)
85+ {
86+ WiFi.mode (WIFI_MODE_NULL);
87+ }
88+ for (i=0 ;i<value;i++)
89+ {
90+ Heltec.display ->drawString (0 , 0 , " Scan start..." );
91+ Heltec.display ->display ();
92+
93+ int n = WiFi.scanNetworks ();
94+ Heltec.display ->drawString (0 , 9 , " Scan done" );
95+ Heltec.display ->display ();
96+ delay (500 );
97+ Heltec.display ->clear ();
98+
99+ if (n == 0 )
100+ {
101+ Heltec.display ->clear ();
102+ Heltec.display ->drawString (0 , 18 , " no network found" );
103+ Heltec.display ->display ();
104+ // while(1);
105+ }
106+ else
107+ {
108+ Heltec.display ->drawString (0 , 18 , (String)n + " nets found" );
109+ Heltec.display ->display ();
110+ delay (2000 );
111+ Heltec.display ->clear ();
112+ }
113+ }
114+ }
115+ bool resendflag=false ;
116+ bool deepsleepflag=false ;
117+ void interrupt_GPIO0 ()
118+ {
119+ delay (10 );
120+ if (digitalRead (0 )==0 )
121+ {
122+ if (digitalRead (LED)==LOW)
123+ {resendflag=true ;}
124+ else
125+ {
126+ deepsleepflag=true ;
127+ }
128+ }
111129}
112-
113130void setup ()
114131{
115- pinMode (LED,OUTPUT);
116- Heltec.begin (true /* DisplayEnable Enable*/ , true /* LoRa Disable*/ , true /* Serial Enable*/ , true /* PABOOST Enable*/ , 470E6 /* */ );
132+ pinMode (LED,OUTPUT);
133+ Heltec.begin (true /* DisplayEnable Enable*/ , true /* LoRa Disable*/ , true /* Serial Enable*/ , true /* PABOOST Enable*/ , 868E6 /* */ );
117134
118- WIFISetUp ();
119- WIFIScan (1 );
135+ WIFISetUp ();
136+ WIFIScan (1 );
120137
121- // register the receive callback
122- LoRa.onReceive (onReceive);
123-
124- // put the radio into receive mode
125- LoRa. receive ();
138+ attachInterrupt ( 0 ,interrupt_GPIO0,FALLING);
139+ LoRa.onReceive (onReceive);
140+ send ();
141+ LoRa. receive ();
142+ displaySendReceive ();
126143}
127144
128145void loop ()
129146{
130- if (millis () - lastSendTime > interval)// waiting LoRa interrupt
131- {
132- LoRa.beginPacket ();
133- LoRa.print (" hello " );
134- LoRa.print (counter++);
135- LoRa.endPacket ();
136-
137- LoRa.receive ();
138-
139- digitalWrite (LED,HIGH);
140- Heltec.display ->drawString (0 , 0 , (String)(counter-1 ) + " sent done" );
141- Heltec.display ->display ();
142-
143- interval = random (1000 ) + 1000 ; // 1~2 seconds
144- lastSendTime = millis ();
145-
146- Heltec.display ->clear ();
147- }
148- if (receiveflag)
149- {
150- Heltec.display ->drawString (0 ,9 , " Received " + packSize);
151- Heltec.display ->drawString (0 ,16 , packet);
152- Heltec.display ->drawString (0 ,24 , rssi);
153- Heltec.display ->display ();
154-
155- digitalWrite (LED,LOW);
156-
157- receiveflag = false ;
158- }
159- // delay(1000);
147+ if (deepsleepflag)
148+ {
149+ LoRa.end ();
150+ LoRa.sleep ();
151+ delay (100 );
152+ pinMode (4 ,INPUT);
153+ pinMode (5 ,INPUT);
154+ pinMode (14 ,INPUT);
155+ pinMode (15 ,INPUT);
156+ pinMode (16 ,INPUT);
157+ pinMode (17 ,INPUT);
158+ pinMode (18 ,INPUT);
159+ pinMode (19 ,INPUT);
160+ pinMode (26 ,INPUT);
161+ pinMode (27 ,INPUT);
162+ digitalWrite (Vext,HIGH);
163+ delay (2 );
164+ esp_deep_sleep_start ();
165+ }
166+ if (resendflag)
167+ {
168+ resendflag=false ;
169+ send ();
170+ LoRa.receive ();
171+ displaySendReceive ();
172+ }
173+ if (receiveflag)
174+ {
175+ digitalWrite (25 ,HIGH);
176+ displaySendReceive ();
177+ delay (1000 );
178+ receiveflag = false ;
179+ send ();
180+ LoRa.receive ();
181+ displaySendReceive ();
182+ }
183+ }
184+
185+ void send ()
186+ {
187+ LoRa.beginPacket ();
188+ LoRa.print (" hello " );
189+ LoRa.print (counter++);
190+ LoRa.endPacket ();
160191}
192+ void displaySendReceive ()
193+ {
194+ Heltec.display ->drawString (0 , 0 , (String)(counter-1 ) + " sent done" );
195+ Heltec.display ->drawString (0 ,9 , " Received " + packSize);
196+ Heltec.display ->drawString (0 ,16 , packet);
197+ Heltec.display ->drawString (0 ,24 , rssi);
198+ Heltec.display -> display ();
199+ delay (100 );
200+ Heltec.display -> clear ();
201+ }
202+
161203
162204void onReceive (int packetSize)// LoRa receiver interrupt service
163205{
164- // if (packetSize == 0) return;
206+ // if (packetSize == 0) return;
165207
166- packet = " " ;
208+ packet = " " ;
167209 packSize = String (packetSize,DEC);
168210
169211 while (LoRa.available ())
170212 {
171- packet += (char ) LoRa.read ();
213+ packet += (char ) LoRa.read ();
172214 }
173215
174216 Serial.println (packet);
0 commit comments