silenius

Untitled

Feb 9th, 2021
853
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  * HelTec Automation(TM) WIFI_LoRa_32 factory test code, witch includ
  3.  * follow functions:
  4.  *
  5.  * - Basic OLED function test;
  6.  *
  7.  * - Basic serial port test(in baud rate 115200);
  8.  *
  9.  * - LED blink test;
  10.  *
  11.  * - WIFI connect and scan test;
  12.  *
  13.  * - LoRa Ping-Pong test (DIO0 -- GPIO26 interrup check the new incoming messages);
  14.  *
  15.  * - Timer test and some other Arduino basic functions.
  16.  *
  17.  * by Aaron.Lee from HelTec AutoMation, ChengDu, China
  18.  * 成都惠利特自动化科技有限公司
  19.  * https://heltec.org
  20.  *
  21.  * this project also realess in GitHub:
  22.  * https://github.com/HelTecAutomation/Heltec_ESP32
  23. */
  24.  
  25. #include "Arduino.h"
  26. #include "heltec.h"
  27. #include "WiFi.h"
  28. #include "images.h"
  29.  
  30. #define BAND    868E6  //you can set band here directly,e.g. 868E6,915E6
  31.  
  32. String rssi = "RSSI --";
  33. String packSize = "--";
  34. String packet;
  35.  
  36. unsigned int counter = 0;
  37.  
  38. bool receiveflag = false; // software flag for LoRa receiver, received data makes it true.
  39.  
  40. long lastSendTime = 0;        // last send time
  41. int interval = 1000;          // interval between sends
  42. uint64_t chipid;
  43.  
  44. void logo(){
  45.     Heltec.display -> clear();
  46.     Heltec.display -> drawXbm(0,5,logo_width,logo_height,(const unsigned char *)logo_bits);
  47.     Heltec.display -> display();
  48. }
  49.  
  50. void WIFISetUp(void)
  51. {
  52.     // Set WiFi to station mode and disconnect from an AP if it was previously connected
  53.     WiFi.disconnect(true);
  54.     delay(100);
  55.     WiFi.mode(WIFI_STA);
  56.     WiFi.setAutoConnect(true);
  57.     WiFi.begin("Your WiFi SSID","Your Password");//fill in "Your WiFi SSID","Your Password"
  58.     delay(100);
  59.  
  60.     byte count = 0;
  61.     while(WiFi.status() != WL_CONNECTED && count < 10)
  62.     {
  63.         count ++;
  64.         delay(500);
  65.         Heltec.display -> drawString(0, 0, "Connecting...");
  66.         Heltec.display -> display();
  67.     }
  68.  
  69.     Heltec.display -> clear();
  70.     if(WiFi.status() == WL_CONNECTED)
  71.     {
  72.         Heltec.display -> drawString(0, 0, "Connecting...OK.");
  73.         Heltec.display -> display();
  74. //      delay(500);
  75.     }
  76.     else
  77.     {
  78.         Heltec.display -> clear();
  79.         Heltec.display -> drawString(0, 0, "Connecting...Failed");
  80.         Heltec.display -> display();
  81.         //while(1);
  82.     }
  83.     Heltec.display -> drawString(0, 10, "WIFI Setup done");
  84.     Heltec.display -> display();
  85.     delay(500);
  86. }
  87.  
  88. void WIFIScan(unsigned int value)
  89. {
  90.     unsigned int i;
  91.     WiFi.mode(WIFI_STA);
  92.  
  93.     for(i=0;i<value;i++)
  94.     {
  95.         Heltec.display -> drawString(0, 20, "Scan start...");
  96.         Heltec.display -> display();
  97.  
  98.         int n = WiFi.scanNetworks();
  99.         Heltec.display -> drawString(0, 30, "Scan done");
  100.         Heltec.display -> display();
  101.         delay(500);
  102.         Heltec.display -> clear();
  103.  
  104.         if (n == 0)
  105.         {
  106.             Heltec.display -> clear();
  107.             Heltec.display -> drawString(0, 0, "no network found");
  108.             Heltec.display -> display();
  109.             //while(1);
  110.         }
  111.         else
  112.         {
  113.             Heltec.display -> drawString(0, 0, (String)n);
  114.             Heltec.display -> drawString(14, 0, "networks found:");
  115.             Heltec.display -> display();
  116.             delay(500);
  117.  
  118.             for (int i = 0; i < n; ++i) {
  119.             // Print SSID and RSSI for each network found
  120.                 Heltec.display -> drawString(0, (i+1)*9,(String)(i + 1));
  121.                 Heltec.display -> drawString(6, (i+1)*9, ":");
  122.                 Heltec.display -> drawString(12,(i+1)*9, (String)(WiFi.SSID(i)));
  123.                 Heltec.display -> drawString(90,(i+1)*9, " (");
  124.                 Heltec.display -> drawString(98,(i+1)*9, (String)(WiFi.RSSI(i)));
  125.                 Heltec.display -> drawString(114,(i+1)*9, ")");
  126.                 //            display.println((WiFi.encryptionType(i) == WIFI_AUTH_OPEN)?" ":"*");
  127.                 delay(10);
  128.             }
  129.         }
  130.  
  131.         Heltec.display -> display();
  132.         delay(800);
  133.         Heltec.display -> clear();
  134.     }
  135. }
  136.  
  137. bool resendflag=false;
  138. bool deepsleepflag=false;
  139. void interrupt_GPIO0()
  140. {
  141.   delay(10);
  142.   if(digitalRead(0)==0)
  143.   {
  144.       if(digitalRead(LED)==LOW)
  145.       {resendflag=true;}
  146.       else
  147.       {
  148.         deepsleepflag=true;
  149.       }    
  150.   }
  151. }
  152.  
  153. void setup()
  154. {
  155.     Heltec.begin(true /*DisplayEnable Enable*/, true /*LoRa Enable*/, true /*Serial Enable*/, true /*LoRa use PABOOST*/, BAND /*LoRa RF working band*/);
  156.  
  157.     logo();
  158.     delay(300);
  159.     Heltec.display -> clear();
  160.  
  161.     WIFISetUp();
  162.     WiFi.disconnect(); //重新初始化WIFI
  163.     WiFi.mode(WIFI_STA);
  164.     delay(100);
  165.  
  166.     WIFIScan(1);
  167.  
  168.     chipid=ESP.getEfuseMac();//The chip ID is essentially its MAC address(length: 6 bytes).
  169.     Serial.printf("ESP32ChipID=%04X",(uint16_t)(chipid>>32));//print High 2 bytes
  170.     Serial.printf("%08X\n",(uint32_t)chipid);//print Low 4bytes.
  171.  
  172.     attachInterrupt(0,interrupt_GPIO0,FALLING);
  173.     LoRa.onReceive(onReceive);
  174.     send();
  175.     LoRa.receive();
  176.     displaySendReceive();
  177. }
  178.  
  179.  
  180. void loop()
  181. {
  182.  if(deepsleepflag)
  183.  {
  184.   LoRa.end();
  185.   LoRa.sleep();
  186.   delay(100);
  187.   pinMode(4,INPUT);
  188.   pinMode(5,INPUT);
  189.   pinMode(14,INPUT);
  190.   pinMode(15,INPUT);
  191.   pinMode(16,INPUT);
  192.   pinMode(17,INPUT);
  193.   pinMode(18,INPUT);
  194.   pinMode(19,INPUT);
  195.   pinMode(26,INPUT);
  196.   pinMode(27,INPUT);
  197.   digitalWrite(Vext,HIGH);
  198.   delay(2);
  199.   esp_deep_sleep_start();
  200.  }
  201.  if(resendflag)
  202.  {
  203.    resendflag=false;
  204.    send();      
  205.    LoRa.receive();
  206.    displaySendReceive();
  207.  }
  208.  if(receiveflag)
  209.  {
  210.     digitalWrite(25,HIGH);
  211.     displaySendReceive();
  212.     delay(1000);
  213.     receiveflag = false;  
  214.     send();
  215.     LoRa.receive();
  216.     displaySendReceive();
  217.   }
  218. }
  219.  
  220. void send()
  221. {
  222.     LoRa.beginPacket();
  223.     LoRa.print("hello ");
  224.     LoRa.print(counter++);
  225.     LoRa.endPacket();
  226. }
  227. void displaySendReceive()
  228. {
  229.     Heltec.display -> drawString(0, 50, "Packet " + (String)(counter-1) + " sent done");
  230.     Heltec.display -> drawString(0, 0, "Received Size  " + packSize + " packages:");
  231.     Heltec.display -> drawString(0, 10, packet);
  232.     Heltec.display -> drawString(0, 20, "With " + rssi + "db");
  233.     Heltec.display -> display();
  234.     delay(100);
  235.     Heltec.display -> clear();
  236. }
  237. void onReceive(int packetSize)//LoRa receiver interrupt service
  238. {
  239.     //if (packetSize == 0) return;
  240.  
  241.     packet = "";
  242.     packSize = String(packetSize,DEC);
  243.  
  244.     while (LoRa.available())
  245.     {
  246.         packet += (char) LoRa.read();
  247.     }
  248.  
  249.     Serial.println(packet);
  250.     rssi = "RSSI: " + String(LoRa.packetRssi(), DEC);    
  251.     receiveflag = true;    
  252. }
Advertisement
Add Comment
Please, Sign In to add comment