Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
252 lines (224 sloc) 5.6 KB
/*
* HelTec Automation(TM) WIFI_LoRa_32 factory test code, witch includ
* follow functions:
*
* - Basic OLED function test;
*
* - Basic serial port test(in baud rate 115200);
*
* - LED blink test;
*
* - WIFI join and scan test;
*
* - LoRa Ping-Pong test(DIO0 -- GPIO26 interrup check the new incoming messages;
*
* - Timer test and some other Arduino basic functions.
*
* by Aaron.Lee from HelTec AutoMation, ChengDu, China
* 成都惠利特自动化科技有限公司
* www.heltec.cn
*
* this project also realess in GitHub:
* https://github.com/HelTecAutomation/Heltec_ESP32
*/
#include "Arduino.h"
#include "heltec.h"
#include "LoRa.h"
#include "WiFi.h"
#include "images.h"
#define BAND 868E6 //you can set band here directly,e.g. 868E6,915E6
String rssi = "RSSI --";
String packSize = "--";
String packet;
unsigned int counter = 0;
bool receiveflag = false; // software flag for LoRa receiver, received data makes it true.
long lastSendTime = 0; // last send time
int interval = 1000; // interval between sends
void logo(){
Heltec.display -> clear();
Heltec.display -> drawXbm(0,5,logo_width,logo_height,(const unsigned char *)logo_bits);
Heltec.display -> display();
}
void WIFISetUp(void)
{
// Set WiFi to station mode and disconnect from an AP if it was previously connected
WiFi.disconnect(true);
delay(1000);
WiFi.mode(WIFI_STA);
WiFi.setAutoConnect(true);
WiFi.begin("Your WiFi SSID","Your Password");//fill in "Your WiFi SSID","Your Password"
delay(100);
byte count = 0;
while(WiFi.status() != WL_CONNECTED && count < 10)
{
count ++;
delay(500);
Heltec.display -> drawString(0, 0, "Connecting...");
Heltec.display -> display();
}
Heltec.display -> clear();
if(WiFi.status() == WL_CONNECTED)
{
Heltec.display -> drawString(0, 0, "Connecting...OK.");
Heltec.display -> display();
// delay(500);
}
else
{
Heltec.display -> clear();
Heltec.display -> drawString(0, 0, "Connecting...Failed");
Heltec.display -> display();
//while(1);
}
Heltec.display -> drawString(0, 10, "WIFI Setup done");
Heltec.display -> display();
delay(500);
}
void WIFIScan(unsigned int value)
{
unsigned int i;
if(WiFi.status() != WL_CONNECTED)
{
WiFi.mode(WIFI_MODE_NULL);
}
for(i=0;i<value;i++)
{
Heltec.display -> drawString(0, 20, "Scan start...");
Heltec.display -> display();
int n = WiFi.scanNetworks();
Heltec.display -> drawString(0, 30, "Scan done");
Heltec.display -> display();
delay(500);
Heltec.display -> clear();
if (n == 0)
{
Heltec.display -> clear();
Heltec.display -> drawString(0, 0, "no network found");
Heltec.display -> display();
//while(1);
}
else
{
Heltec.display -> drawString(0, 0, (String)n);
Heltec.display -> drawString(14, 0, "networks found:");
Heltec.display -> display();
delay(500);
for (int i = 0; i < n; ++i) {
// Print SSID and RSSI for each network found
Heltec.display -> drawString(0, (i+1)*9,(String)(i + 1));
Heltec.display -> drawString(6, (i+1)*9, ":");
Heltec.display -> drawString(12,(i+1)*9, (String)(WiFi.SSID(i)));
Heltec.display -> drawString(90,(i+1)*9, " (");
Heltec.display -> drawString(98,(i+1)*9, (String)(WiFi.RSSI(i)));
Heltec.display -> drawString(114,(i+1)*9, ")");
// display.println((WiFi.encryptionType(i) == WIFI_AUTH_OPEN)?" ":"*");
delay(10);
}
}
Heltec.display -> display();
delay(800);
Heltec.display -> clear();
}
}
bool resendflag=false;
bool deepsleepflag=false;
void interrupt_GPIO0()
{
delay(10);
if(digitalRead(0)==0)
{
if(digitalRead(LED)==LOW)
{resendflag=true;}
else
{
deepsleepflag=true;
}
}
}
void setup()
{
Heltec.begin(true /*DisplayEnable Enable*/, true /*LoRa Enable*/, true /*Serial Enable*/, true /*LoRa use PABOOST*/, BAND /*LoRa RF working band*/);
logo();
delay(300);
Heltec.display -> clear();
WIFISetUp();
WiFi.disconnect(true); //重新初始化WIFI
delay(1000);
WiFi.mode(WIFI_STA);
WiFi.setAutoConnect(true);
WIFIScan(1);
attachInterrupt(0,interrupt_GPIO0,FALLING);
LoRa.onReceive(onReceive);
send();
LoRa.receive();
displaySendReceive();
}
void loop()
{
if(deepsleepflag)
{
LoRa.end();
LoRa.sleep();
delay(100);
pinMode(4,INPUT);
pinMode(5,INPUT);
pinMode(14,INPUT);
pinMode(15,INPUT);
pinMode(16,INPUT);
pinMode(17,INPUT);
pinMode(18,INPUT);
pinMode(19,INPUT);
pinMode(26,INPUT);
pinMode(27,INPUT);
digitalWrite(Vext,HIGH);
delay(2);
esp_deep_sleep_start();
}
if(resendflag)
{
resendflag=false;
send();
LoRa.receive();
displaySendReceive();
}
if(receiveflag)
{
digitalWrite(25,HIGH);
displaySendReceive();
delay(1000);
receiveflag = false;
send();
LoRa.receive();
displaySendReceive();
}
}
void send()
{
LoRa.beginPacket();
LoRa.print("hello ");
LoRa.print(counter++);
LoRa.endPacket();
}
void displaySendReceive()
{
Heltec.display -> drawString(0, 50, "Packet " + (String)(counter-1) + " sent done");
Heltec.display -> drawString(0, 0, "Received Size " + packSize + " packages:");
Heltec.display -> drawString(0, 10, packet);
Heltec.display -> drawString(0, 20, "With " + rssi + "db");
Heltec.display -> display();
delay(100);
Heltec.display -> clear();
}
void onReceive(int packetSize)//LoRa receiver interrupt service
{
//if (packetSize == 0) return;
packet = "";
packSize = String(packetSize,DEC);
while (LoRa.available())
{
packet += (char) LoRa.read();
}
Serial.println(packet);
rssi = "RSSI: " + String(LoRa.packetRssi(), DEC);
receiveflag = true;
}
You can’t perform that action at this time.