Advertisement
Guest User

Untitled

a guest
Apr 9th, 2017
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.01 KB | None | 0 0
  1. #include <ESP8266WiFi.h>
  2. #include "WeatherClient.h"
  3. #include <Ticker.h>
  4. #include "SSD1306.h"
  5. #include "icons.h"
  6. #include <PubSubClient.h>
  7. #include "SetupGBot.h"
  8.  
  9. SetupGBot GBot;
  10.  
  11. // Initialize the oled display for address 0x3c
  12. // sda-pin=GPIO0 and scl-pin=GPIO2
  13. SSD1306 display(0x3c, 4, 5); // SDA:D2,SCL:D1
  14. WeatherClient weather;
  15. Ticker ticker;
  16.  
  17. const char *mqttServ = "m12.cloudmqtt.com";
  18. const int mqttPort = 14711;
  19. const char *mqttUser = "vgzfmnpz";
  20. const char *mqttPass = "vw7yGbp68jHc";
  21.  
  22. const char *subTopic = "/Location"; // subscribe
  23.  
  24. // flag changed in the ticker function every 10 minutes
  25. bool readyForWeatherUpdate = true;
  26.  
  27. WiFiClient espClient;
  28. PubSubClient client(espClient);
  29.  
  30. void setup() {
  31. Serial.begin(115200);
  32. client.setServer(mqttServ, mqttPort);
  33. client.setCallback(callback);
  34. display.init();
  35. GBot.Setup();
  36. ticker.attach(60 * 10, setReadyForWeatherUpdate);
  37. setReadyForWeatherUpdate();
  38. display.clear();
  39. display.display();
  40. }
  41.  
  42. void callback(char* topic, byte* payload, unsigned int length) {
  43. String readString="";
  44. Serial.print("Message arrived [");
  45. Serial.print(topic);
  46. Serial.print("] ");
  47. for (int i = 0; i < length; i++) {
  48. char msgIN=((char)payload[i]);
  49. Serial.print(msgIN);
  50. readString += msgIN;
  51. }
  52. String msg1="";
  53. String msg2="";
  54. String msg3="";
  55. int lastIndex=0;
  56. int i=0;
  57. int size=readString.length();
  58. for (i = 0; i < readString.length(); i++) {
  59. if (readString.substring(i, i+1) == ",") {
  60. msg1 = readString.substring(0, i);
  61. lastIndex=i+1;
  62. for (i = lastIndex; i < readString.length(); i++) {
  63. if (readString.substring(i, i+1) == ","){
  64. msg2 = readString.substring(lastIndex, i);
  65. msg3 = readString.substring(i+1,size);
  66. }
  67. }
  68. break;
  69. }
  70. }
  71. GBot.ChangeLocationsFromCallBack(msg1,msg2,msg3);
  72. setReadyForWeatherUpdate();
  73. }
  74.  
  75. void reconnect() {
  76. // Loop until we're reconnected
  77. while (!client.connected()) {
  78. Serial.print("Attempting MQTT connection...");
  79. // Attempt to connect
  80. if (client.connect(subTopic, mqttUser, mqttPass)) {
  81. Serial.println("connected");
  82. // ... and resubscribe
  83. client.subscribe(subTopic);
  84. } else {
  85. Serial.print("failed, rc=");
  86. Serial.print(client.state());
  87. Serial.println(" try again in 5 seconds");
  88. // Wait 5 seconds before retrying
  89. delay(5000);
  90. }
  91. }
  92. }
  93.  
  94. void loop() {
  95. if(WiFi.status() != WL_CONNECTED){
  96. DisplayLostConnect();
  97. }
  98. if(WiFi.status() == WL_CONNECTED){
  99. if (!client.connected()) {
  100. reconnect();
  101. }
  102. client.loop();
  103. display.clear();
  104. if (readyForWeatherUpdate==true)// update the weather information every 10 mintues becaue forecast.io only allows 1000 calls per day
  105. {
  106. readyForWeatherUpdate = false;
  107. weather.updateWeatherData(GBot.forecastApiKey, GBot.latitude, GBot.longitude);
  108. }
  109. State1();
  110. delay(2000);
  111. State2();
  112. delay(1500);
  113. State3();
  114. delay(2000);
  115. State4();
  116. delay(1500);
  117. }
  118. if(Serial.available()){
  119. display.clear();
  120. display.display();
  121. GBot.Recieve();
  122. setReadyForWeatherUpdate();
  123. }
  124. }
  125.  
  126. void setReadyForWeatherUpdate() {
  127. readyForWeatherUpdate = true;
  128. }
  129.  
  130. void State1() {
  131. display.drawString(65 , 0 , "Today");
  132. display.drawXbm(0,0, 50, 50, getIconFromString(weather.getCurrentIcon()));
  133. display.setFont(ArialMT_Plain_16);
  134. display.drawString(64 , 14 , String(weather.getCurrentTemp()) + "C");
  135. display.setFont(ArialMT_Plain_16);
  136. display.drawString(64 , 30 , String(weather.getMinTempToday()) + "C/" + String(weather.getMaxTempToday()) + "C");
  137. display.setFont(ArialMT_Plain_10);
  138. display.drawString(15 , 48 , GBot.location);
  139. display.display();
  140. }
  141.  
  142. const char* getIconFromString(String icon) {
  143. if (icon == "clear-day") {
  144. return clear_day_bits;
  145. }
  146. else if (icon == "clear-night") {
  147. return clear_night_bits;
  148. }
  149. else if (icon == "rain") {
  150. return rain_bits;
  151. }
  152. else if (icon == "snow") {
  153. return snow_bits;
  154. }
  155. else if (icon == "sleet") {
  156. return sleet_bits;
  157. }
  158. else if (icon == "wind") {
  159. return wind_bits;
  160. }
  161. else if (icon == "fog") {
  162. return fog_bits;
  163. }
  164. else if (icon == "cloudy") {
  165. return cloudy_bits;
  166. }
  167. else if (icon == "partly-cloudy-day") {
  168. return partly_cloudy_day_bits;
  169. }
  170. else if (icon == "partly-cloudy-night") {
  171. return partly_cloudy_night_bits;
  172. }
  173. return cloudy_bits;
  174. }
  175.  
  176. void State2() {
  177. display.clear();
  178. display.drawString(0 , 0 ,"Today");
  179. if (getIconFromString(weather.getCurrentIcon())==clear_day_bits) {
  180. display.drawXbm(0,0, 128, 64,happy_Logo_bits);
  181. }
  182. else if (getIconFromString(weather.getCurrentIcon()) == clear_night_bits) {
  183. display.drawXbm(0,0, 128, 64,love_bits);
  184. }
  185. else if (getIconFromString(weather.getCurrentIcon()) == rain_bits) {
  186. display.drawXbm(0,0, 128, 64,angry_bits);
  187. }
  188. else if (getIconFromString(weather.getCurrentIcon()) == snow_bits) {
  189. display.drawXbm(0,0, 128, 64,love_bits);
  190. }
  191. else if (getIconFromString(weather.getCurrentIcon()) == sleet_bits) {
  192. display.drawXbm(0,0, 128, 64,angry_bits);
  193. }
  194. else if (getIconFromString(weather.getCurrentIcon()) == wind_bits) {
  195. display.drawXbm(0,0, 128, 64,normal_Logo_bits);
  196. }
  197. else if (getIconFromString(weather.getCurrentIcon()) == fog_bits) {
  198. display.drawXbm(0,0, 128, 64,bored_bits);
  199. }
  200. else if (getIconFromString(weather.getCurrentIcon()) == cloudy_bits) {
  201. display.drawXbm(0,0, 128, 64,normal_Logo_bits);
  202. }
  203. else if (getIconFromString(weather.getCurrentIcon()) == partly_cloudy_day_bits) {
  204. display.drawXbm(0,0, 128, 64,what_bits);
  205. }
  206. else if (getIconFromString(weather.getCurrentIcon()) == partly_cloudy_night_bits) {
  207. display.drawXbm(0,0, 128, 64,what_bits);
  208. }
  209. display.display();
  210. }
  211.  
  212. void State3() {
  213. display.clear();
  214. display.drawString(60 , 0 ,"Tomorrow");
  215. display.drawXbm(0,0, 50, 50, getIconFromString(weather.getIconTomorrow()));
  216. display.setFont(ArialMT_Plain_16);
  217. display.drawString(59 , 14 , String(weather.getSummaryTomorrow()));
  218. display.setFont(ArialMT_Plain_16);
  219. display.drawString(59 , 30 , String(weather.getMinTempTomorrow()) + "C/" + String(weather.getMaxTempTomorrow()) + "C");
  220. display.setFont(ArialMT_Plain_10);
  221. display.drawString(15 , 48 , GBot.location);
  222. display.display();
  223. }
  224.  
  225. void State4() {
  226. display.clear();
  227. display.drawString(0 , 0 ,"Tomorrow");
  228. if (getIconFromString(weather.getIconTomorrow())==clear_day_bits) {
  229. display.drawXbm(0,0, 128, 64,happy_Logo_bits);
  230. }
  231. else if (getIconFromString(weather.getIconTomorrow()) == clear_night_bits) {
  232. display.drawXbm(0,0, 128, 64,love_bits);
  233. }
  234. else if (getIconFromString(weather.getIconTomorrow()) == rain_bits) {
  235. display.drawXbm(0,0, 128, 64,angry_bits);
  236. }
  237. else if (getIconFromString(weather.getIconTomorrow()) == snow_bits) {
  238. display.drawXbm(0,0, 128, 64,love_bits);
  239. }
  240. else if (getIconFromString(weather.getIconTomorrow()) == sleet_bits) {
  241. display.drawXbm(0,0, 128, 64,angry_bits);
  242. }
  243. else if (getIconFromString(weather.getIconTomorrow()) == wind_bits) {
  244. display.drawXbm(0,0, 128, 64,normal_Logo_bits);
  245. }
  246. else if (getIconFromString(weather.getIconTomorrow()) == fog_bits) {
  247. display.drawXbm(0,0, 128, 64,bored_bits);
  248. }
  249. else if (getIconFromString(weather.getIconTomorrow()) == cloudy_bits) {
  250. display.drawXbm(0,0, 128, 64,normal_Logo_bits);
  251. }
  252. else if (getIconFromString(weather.getIconTomorrow()) == partly_cloudy_day_bits) {
  253. display.drawXbm(0,0, 128, 64,what_bits);
  254. }
  255. else if (getIconFromString(weather.getIconTomorrow()) == partly_cloudy_night_bits) {
  256. display.drawXbm(0,0, 128, 64,what_bits);
  257. }
  258. display.display();
  259. }
  260.  
  261. void DisplayLostConnect()
  262. {
  263. display.clear();
  264. display.drawXbm(0, 0, wifi_disconnect_width, wifi_disconnect_height, wifi_disconnect_bits );
  265. display.setFont(ArialMT_Plain_16);
  266. display.setTextAlignment(TEXT_ALIGN_LEFT);
  267. display.drawString(35, 10,"Failed to");
  268. display.setFont(ArialMT_Plain_16);
  269. display.setTextAlignment(TEXT_ALIGN_LEFT);
  270. display.drawString(35, 40,"Connect Wifi");
  271. display.display();
  272.  
  273. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement