ESP12F.ino 8.1 KB

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