Ordinateur.ino 7.4 KB

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