ESP12F.ino 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423
  1. #include "ESP12F.h"
  2. #include <WidgetRTC.h>
  3. /* **************************************************************
  4. Fonction Perso
  5. ***************************************************************/
  6. uint8_t uart_send(uint8_t *in, uint8_t nbTr, uint8_t *out) {
  7. int i;
  8. for (i = 0; i < nbTr; i++)
  9. Serial.write(in[i]);
  10. for (i = 0; i < 8 - nbTr; i++)
  11. Serial.write(0x41);
  12. int time = 0;
  13. while (Serial.available() < SIZEMES) {
  14. //todo delay(1);
  15. time++;
  16. if (time > 1000)
  17. return 1;
  18. }
  19. Serial.readBytes(out, SIZEMES);
  20. if (out[1]&MASKMES != in[1] & MASKMES) {
  21. return 2;
  22. }
  23. return 0;
  24. }
  25. uint8_t transmit(uint8_t *in, uint8_t nbTr, uint8_t *out) {
  26. int i = 0;
  27. int res = uart_send(in, nbTr, out);
  28. /*while (i <= 3) { //Todo
  29. //delay(500);
  30. Serial.println(i);
  31. res = uart_send(in, nbTr, out);
  32. i++;
  33. }*/
  34. return res;
  35. }
  36. void SyncRTC() {
  37. uint8_t nbTr = 8;
  38. uint8_t in[nbTr];
  39. uint8_t out[SIZEMES];
  40. in[0] = SYNCRTC;
  41. in[1] = year() - 2000;
  42. in[2] = month();
  43. in[3] = day();
  44. uint8_t weekd = weekday() - 1;
  45. if (weekday() == 1) weekd = 0;
  46. in[4] = weekd;
  47. in[5] = hour();
  48. in[6] = minute();
  49. in[7] = second();
  50. if (transmit(in, nbTr, out)) {
  51. ;// todo TODO test si retour NOK
  52. }
  53. ;// todo return 0;
  54. }
  55. float convTemp(uint8_t ent) {
  56. return (((float)ent) / 10.0) + 10.0;
  57. }
  58. float convPH(uint8_t ent) {
  59. //TODO
  60. return 8.2;
  61. }
  62. int convSalinity(uint8_t ent) {
  63. //TODO
  64. return 1025;
  65. }
  66. void Status() {
  67. uint8_t nbTr = 1;
  68. uint8_t in[nbTr];
  69. uint8_t out[SIZEMES];
  70. in[0] = STATUS;
  71. if (transmit(in, nbTr, out)) {
  72. ;// todo return 1; // TODO Erreur
  73. }
  74. if (out[5] & 0x80 == 0x80)
  75. TechBas.on();
  76. else
  77. TechBas.off();
  78. if (out[5] & 0x40 == 0x40)
  79. TechHau.on();
  80. else
  81. TechHau.off();
  82. if (out[5] & 0x20 == 0x20)
  83. CuveHau.on();
  84. else
  85. CuveHau.off();
  86. if (out[5] & 0x10 == 0x10)
  87. Reserve.on();
  88. else
  89. Reserve.off();
  90. float air = convTemp(out[1]);
  91. float eau = convTemp(out[2]);
  92. Blynk.virtualWrite(V6, air);
  93. if (air <= 18.0)
  94. Blynk.notify("Temp air < 18°C");
  95. if (air >= 29.0)
  96. Blynk.notify("Temp air > 29°C");
  97. Blynk.virtualWrite(V7, eau);
  98. if (eau <= 24.0)
  99. Blynk.notify("Temp eau < 24°C");
  100. if (eau >= 27.0)
  101. Blynk.notify("Temp eau > 27°C");
  102. Blynk.virtualWrite(V8, convPH(out[3]));
  103. //TODO notif PH
  104. Blynk.virtualWrite(V9, convSalinity(out[4]));
  105. //TODO notif sel
  106. //TODO gestion erreur
  107. in[0] = READACTI;
  108. if (transmit(in, nbTr, out))
  109. ;// todo return 1; // TODO Erreur
  110. Blynk.virtualWrite(V20, (out[1] & ACTIREM) >> 0);
  111. Blynk.virtualWrite(V21, (out[1] & ACTIECU) >> 1);
  112. Blynk.virtualWrite(V22, (out[1] & ACTICHA) >> 2);
  113. Blynk.virtualWrite(V23, (out[1] & ACTIBGE) >> 3);
  114. Blynk.virtualWrite(V24, (out[1] & ACTIBR1) >> 4);
  115. Blynk.virtualWrite(V25, (out[1] & ACTIBR2) >> 5);
  116. Blynk.virtualWrite(V26, (out[1] & ACTIBR2) >> 6);
  117. Blynk.virtualWrite(V27, (out[1] & ACTINOU) >> 7);
  118. in[0] = READVENT;
  119. if (transmit(in, nbTr, out))
  120. ;// todo return 1; // TODO Erreur
  121. Blynk.virtualWrite(V40, (out[1] & 0xF0) >> 4);
  122. Blynk.virtualWrite(V41, (out[1] & 0x0F) >> 0);
  123. ;// todo return 0;
  124. }
  125. /* **************************************************************
  126. Fonction Blynk
  127. ***************************************************************/
  128. BLYNK_CONNECTED() {
  129. rtc.begin();
  130. }
  131. BLYNK_WRITE(V20) {
  132. //Remonter
  133. int val = param.asInt() << 0;
  134. uint8_t in[2];
  135. uint8_t nbTr = 2;
  136. uint8_t out[8];
  137. //lecture ancien param
  138. in[0] = READACTI;
  139. if (transmit(in, 1, out)) {
  140. ;// todo return 1;
  141. }
  142. //envoie nouveau parametre
  143. in[0] = WRITACTI;
  144. in[1] = out[1] & (!ACTIREM | val);
  145. if (transmit(in, nbTr, out)) {
  146. ;// todo return 1;
  147. }
  148. }
  149. BLYNK_WRITE(V21) {
  150. //Ecumeur
  151. int val = param.asInt() << 1;
  152. uint8_t in[2];
  153. uint8_t nbTr = 2;
  154. uint8_t out[8];
  155. //lecture ancien param
  156. in[0] = READACTI;
  157. if (transmit(in, 1, out)) {
  158. ;// todo return 1;
  159. }
  160. //envoie nouveau parametre
  161. in[0] = WRITACTI;
  162. in[1] = out[1] & (!ACTIECU | val);
  163. if (transmit(in, nbTr, out)) {
  164. ;// todo return 1;
  165. }
  166. }
  167. BLYNK_WRITE(V22) {
  168. //Chauffage
  169. int val = param.asInt() << 2;
  170. uint8_t in[2];
  171. uint8_t nbTr = 2;
  172. uint8_t out[8];
  173. //lecture ancien param
  174. in[0] = READACTI;
  175. if (transmit(in, 1, out)) {
  176. ;// todo return 1;
  177. }
  178. //envoie nouveau parametre
  179. in[0] = WRITACTI;
  180. in[1] = out[1] & (!ACTICHA | val);
  181. if (transmit(in, nbTr, out)) {
  182. ;// todo return 1;
  183. }
  184. }
  185. BLYNK_WRITE(V23) {
  186. //Brassage Général
  187. int val = param.asInt() << 3;
  188. uint8_t in[2];
  189. uint8_t nbTr = 2;
  190. uint8_t out[8];
  191. //lecture ancien param
  192. in[0] = READACTI;
  193. if (transmit(in, 1, out)) {
  194. ;// todo return 1;
  195. }
  196. //envoie nouveau parametre
  197. in[0] = WRITACTI;
  198. in[1] = out[1] & (!ACTIBGE | val);
  199. if (transmit(in, nbTr, out)) {
  200. ;// todo return 1;
  201. }
  202. }
  203. BLYNK_WRITE(V24) {
  204. //Brassage1
  205. int val = param.asInt() << 4;
  206. uint8_t in[2];
  207. uint8_t nbTr = 2;
  208. uint8_t out[8];
  209. //lecture ancien param
  210. in[0] = READACTI;
  211. if (transmit(in, 1, out)) {
  212. ;// todo return 1;
  213. }
  214. //envoie nouveau parametre
  215. in[0] = WRITACTI;
  216. in[1] = out[1] & (!ACTIBR1 | val);
  217. if (transmit(in, nbTr, out)) {
  218. ;// todo return 1;
  219. }
  220. }
  221. BLYNK_WRITE(V25) {
  222. //Brassage2
  223. int val = param.asInt() << 5;
  224. uint8_t in[2];
  225. uint8_t nbTr = 2;
  226. uint8_t out[8];
  227. //lecture ancien param
  228. in[0] = READACTI;
  229. if (transmit(in, 1, out)) {
  230. ;// todo return 1;
  231. }
  232. //envoie nouveau parametre
  233. in[0] = WRITACTI;
  234. in[1] = out[1] & (!ACTIBR2 | val);
  235. if (transmit(in, nbTr, out)) {
  236. ;// todo return 1;
  237. }
  238. }
  239. BLYNK_WRITE(V26){
  240. int val = param.asInt() << 6;
  241. uint8_t in[2];
  242. uint8_t nbTr = 2;
  243. uint8_t out[8];
  244. //lecture ancien param
  245. in[0] = READACTI;
  246. if (transmit(in, 1, out)) {
  247. ;// todo return 1;
  248. }
  249. //envoie nouveau parametre
  250. in[0] = WRITACTI;
  251. in[1] = out[1] & (!ACTIOSM | val);
  252. if (transmit(in, nbTr, out)) {
  253. ;// todo return 1;
  254. }
  255. }
  256. BLYNK_WRITE(V27) {
  257. //Nourrisage
  258. int val = param.asInt() << 7;
  259. uint8_t in[2];
  260. uint8_t nbTr = 2;
  261. uint8_t out[8];
  262. //lecture ancien param
  263. in[0] = READACTI;
  264. if (transmit(in, 1, out)) {
  265. ;// todo return 1;
  266. }
  267. //envoie nouveau parametre
  268. in[0] = WRITACTI;
  269. in[1] = out[1] & (!ACTINOU | val);
  270. if (transmit(in, nbTr, out)) {
  271. ;// todo return 1;
  272. }
  273. }
  274. BLYNK_WRITE(V40){
  275. int val = param.asInt();
  276. uint8_t in[2];
  277. uint8_t nbTr = 2;
  278. uint8_t out[8];
  279. //lecture ancien param
  280. in[0] = READVENT;
  281. if (transmit(in, 1, out)) {
  282. ;// todo return 1;
  283. }
  284. //envoie nouveau parametre
  285. in[0] = WRITVENT;
  286. in[1] = out[1] & (!0xF0 | val<<4);// todo a modif
  287. if (transmit(in, nbTr, out)) {
  288. ;// todo return 1;
  289. }
  290. }
  291. BLYNK_WRITE(V41){
  292. int val = param.asInt();
  293. uint8_t in[2];
  294. uint8_t nbTr = 2;
  295. uint8_t out[8];
  296. //lecture ancien param
  297. in[0] = READVENT;
  298. if (transmit(in, 1, out)) {
  299. ;// todo return 1;
  300. }
  301. //envoie nouveau parametre
  302. in[0] = WRITVENT;
  303. in[1] = out[1] & (!0x0F | val);// todo a modif
  304. if (transmit(in, nbTr, out)) {
  305. ;// todo return 1;
  306. }
  307. }
  308. BLYNK_WRITE(V50){
  309. int val = param.asInt();
  310. uint8_t in[2];
  311. uint8_t nbTr = 2;
  312. uint8_t out[8];
  313. in[0] = WRITVENT;
  314. in[1] = val;
  315. if (transmit(in, nbTr, out)) {
  316. ;// todo return 1;
  317. }
  318. }
  319. /* **************************************************************
  320. Fonction Arduino
  321. ***************************************************************/
  322. uint8_t out[8];
  323. uint8_t in[8];
  324. void setup() {
  325. Blynk.begin(auth, ssid, pass, IPAddress(192, 168, 1, 18), 8081);
  326. //timerRTC.setInterval(1000L * 3600, SyncRTC); // une synchro de la RTC par heure
  327. timerStatus.setInterval(2000L, Status); // un Status toute les 2 secs
  328. Serial.begin(115200);
  329. pinMode(LED_BUILTIN, OUTPUT); // Initialize the LED_BUILTIN pin as an output
  330. }
  331. void loop() {
  332. Blynk.run();
  333. //timerRTC.run();
  334. timerStatus.run();
  335. }