Blynk example

Dependents:   Blynk_Example_WIZwiki-W7500

Fork of Blynk by Volodymyr Shymanskyy

Committer:
jcm931213
Date:
Wed Aug 02 02:00:41 2017 +0000
Revision:
15:544afbc8228f
Child:
16:5d8386745e22
W7500 Blynk;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jcm931213 15:544afbc8228f 1 /**
jcm931213 15:544afbc8228f 2 * @file BlynkSimpleEthernet2.h
jcm931213 15:544afbc8228f 3 * @author Volodymyr Shymanskyy
jcm931213 15:544afbc8228f 4 * @license This project is released under the MIT License (MIT)
jcm931213 15:544afbc8228f 5 * @copyright Copyright (c) 2015 Volodymyr Shymanskyy
jcm931213 15:544afbc8228f 6 * @date May 2016
jcm931213 15:544afbc8228f 7 * @brief
jcm931213 15:544afbc8228f 8 *
jcm931213 15:544afbc8228f 9 */
jcm931213 15:544afbc8228f 10
jcm931213 15:544afbc8228f 11 #ifndef BlynkSimpleEthernet2_h
jcm931213 15:544afbc8228f 12 #define BlynkSimpleEthernet2_h
jcm931213 15:544afbc8228f 13
jcm931213 15:544afbc8228f 14 #ifndef BLYNK_INFO_CONNECTION
jcm931213 15:544afbc8228f 15 #define BLYNK_INFO_CONNECTION "W5500"
jcm931213 15:544afbc8228f 16 #endif
jcm931213 15:544afbc8228f 17
jcm931213 15:544afbc8228f 18 #include <BlynkApiMbed.h>
jcm931213 15:544afbc8228f 19 #include <Blynk/BlynkProtocol.h>
jcm931213 15:544afbc8228f 20 #include <utility/BlynkFifo2.h>
jcm931213 15:544afbc8228f 21
jcm931213 15:544afbc8228f 22
jcm931213 15:544afbc8228f 23 #include "EthernetInterface.h"
jcm931213 15:544afbc8228f 24 #include "TCPSocketConnection.h"
jcm931213 15:544afbc8228f 25
jcm931213 15:544afbc8228f 26 #define JCM_DEBUG
jcm931213 15:544afbc8228f 27
jcm931213 15:544afbc8228f 28 //EthernetInterface eth;
jcm931213 15:544afbc8228f 29
jcm931213 15:544afbc8228f 30 template <typename Client>
jcm931213 15:544afbc8228f 31 class BlynkMbedClientGen
jcm931213 15:544afbc8228f 32 {
jcm931213 15:544afbc8228f 33 public:
jcm931213 15:544afbc8228f 34 BlynkMbedClientGen(Client& c)
jcm931213 15:544afbc8228f 35 : client(NULL), port(0), isConn(false)
jcm931213 15:544afbc8228f 36 {
jcm931213 15:544afbc8228f 37 setClient(&c);
jcm931213 15:544afbc8228f 38 }
jcm931213 15:544afbc8228f 39 BlynkMbedClientGen()
jcm931213 15:544afbc8228f 40 : client(NULL), port(0), isConn(false)
jcm931213 15:544afbc8228f 41 {}
jcm931213 15:544afbc8228f 42
jcm931213 15:544afbc8228f 43 void setClient(Client* c) {
jcm931213 15:544afbc8228f 44 client = c;
jcm931213 15:544afbc8228f 45 client->setTimeout(BLYNK_TIMEOUT_MS);
jcm931213 15:544afbc8228f 46 }
jcm931213 15:544afbc8228f 47
jcm931213 15:544afbc8228f 48
jcm931213 15:544afbc8228f 49 void begin(const char* a, uint16_t p) {
jcm931213 15:544afbc8228f 50 addr = a;
jcm931213 15:544afbc8228f 51 port = p;
jcm931213 15:544afbc8228f 52 }
jcm931213 15:544afbc8228f 53
jcm931213 15:544afbc8228f 54 bool connect() {
jcm931213 15:544afbc8228f 55 isConn = (1 == client->connect(addr, port));
jcm931213 15:544afbc8228f 56 return isConn;
jcm931213 15:544afbc8228f 57
jcm931213 15:544afbc8228f 58 }
jcm931213 15:544afbc8228f 59
jcm931213 15:544afbc8228f 60 void disconnect() {isConn=false; client->close(); }
jcm931213 15:544afbc8228f 61
jcm931213 15:544afbc8228f 62 int read(void* buf, int len){
jcm931213 15:544afbc8228f 63 int res=client->receive((char*)buf, len);
jcm931213 15:544afbc8228f 64 return res;
jcm931213 15:544afbc8228f 65 }
jcm931213 15:544afbc8228f 66
jcm931213 15:544afbc8228f 67 int write(const void* buf, int len){
jcm931213 15:544afbc8228f 68 int res=client->send((char*)buf, len);
jcm931213 15:544afbc8228f 69 return res;
jcm931213 15:544afbc8228f 70 }
jcm931213 15:544afbc8228f 71
jcm931213 15:544afbc8228f 72
jcm931213 15:544afbc8228f 73 bool connected() { return isConn && client->is_connected();}
jcm931213 15:544afbc8228f 74 int available() {return isConn;} //&& client->connected();} //eth get rx rsr 읽어오기
jcm931213 15:544afbc8228f 75
jcm931213 15:544afbc8228f 76
jcm931213 15:544afbc8228f 77 protected:
jcm931213 15:544afbc8228f 78 Client* client;
jcm931213 15:544afbc8228f 79 const char* addr;
jcm931213 15:544afbc8228f 80 uint16_t port;
jcm931213 15:544afbc8228f 81 bool isConn;
jcm931213 15:544afbc8228f 82 };
jcm931213 15:544afbc8228f 83
jcm931213 15:544afbc8228f 84 typedef BlynkMbedClientGen<TCPSocketConnection> BlynkMbedClient;
jcm931213 15:544afbc8228f 85
jcm931213 15:544afbc8228f 86
jcm931213 15:544afbc8228f 87 class BlynkEthernet
jcm931213 15:544afbc8228f 88 : public BlynkProtocol<BlynkMbedClient>
jcm931213 15:544afbc8228f 89 {
jcm931213 15:544afbc8228f 90 typedef BlynkProtocol<BlynkMbedClient> Base;
jcm931213 15:544afbc8228f 91 public:
jcm931213 15:544afbc8228f 92 BlynkEthernet(BlynkMbedClient& transp)
jcm931213 15:544afbc8228f 93 : Base(transp)
jcm931213 15:544afbc8228f 94 {}
jcm931213 15:544afbc8228f 95
jcm931213 15:544afbc8228f 96
jcm931213 15:544afbc8228f 97 void config(const char* auth,
jcm931213 15:544afbc8228f 98 const char* addr = BLYNK_DEFAULT_DOMAIN,
jcm931213 15:544afbc8228f 99 uint16_t port = BLYNK_DEFAULT_PORT)
jcm931213 15:544afbc8228f 100 {
jcm931213 15:544afbc8228f 101 Base::begin(auth);
jcm931213 15:544afbc8228f 102 this->conn.begin(addr, port);
jcm931213 15:544afbc8228f 103 }
jcm931213 15:544afbc8228f 104
jcm931213 15:544afbc8228f 105
jcm931213 15:544afbc8228f 106 // DHCP with domain
jcm931213 15:544afbc8228f 107 void begin( const char* auth,
jcm931213 15:544afbc8228f 108 const char* addr = BLYNK_DEFAULT_DOMAIN,
jcm931213 15:544afbc8228f 109 uint16_t port = BLYNK_DEFAULT_PORT,
jcm931213 15:544afbc8228f 110 uint8_t mac[] = NULL)
jcm931213 15:544afbc8228f 111 {
jcm931213 15:544afbc8228f 112 // int phy_link;
jcm931213 15:544afbc8228f 113
jcm931213 15:544afbc8228f 114
jcm931213 15:544afbc8228f 115 #ifdef JCM_DEBUG
jcm931213 15:544afbc8228f 116 // printf("blnk begin 1\r\n");
jcm931213 15:544afbc8228f 117 #endif
jcm931213 15:544afbc8228f 118 //BLYNK_LOG1(BLYNK_F("Getting IP..."));
jcm931213 15:544afbc8228f 119 //eth.init(mac_addr);
jcm931213 15:544afbc8228f 120 #ifdef JCM_DEBUG
jcm931213 15:544afbc8228f 121 // printf("eth init 1\r\n");
jcm931213 15:544afbc8228f 122 #endif
jcm931213 15:544afbc8228f 123 //do{
jcm931213 15:544afbc8228f 124 // phy_link = eth.ethernet_link();
jcm931213 15:544afbc8228f 125 // printf("...");
jcm931213 15:544afbc8228f 126 // wait(2);
jcm931213 15:544afbc8228f 127 // }while(!phy_link);
jcm931213 15:544afbc8228f 128 // printf("\r\n");
jcm931213 15:544afbc8228f 129 //
jcm931213 15:544afbc8228f 130 // eth.connect();
jcm931213 15:544afbc8228f 131 // printf("eth connection!\r\n");
jcm931213 15:544afbc8228f 132 // // give the Ethernet shield a second to initialize:
jcm931213 15:544afbc8228f 133 // ::delay(1000);
jcm931213 15:544afbc8228f 134
jcm931213 15:544afbc8228f 135 //char* myip = eth.getIPAddress();
jcm931213 15:544afbc8228f 136 //BLYNK_LOG_IP("IP:", myip);
jcm931213 15:544afbc8228f 137
jcm931213 15:544afbc8228f 138 config(auth, addr, port);
jcm931213 15:544afbc8228f 139 while(this->connect() != true) {}
jcm931213 15:544afbc8228f 140 }
jcm931213 15:544afbc8228f 141
jcm931213 15:544afbc8228f 142
jcm931213 15:544afbc8228f 143 // // Static IP with domain, gateway, etc
jcm931213 15:544afbc8228f 144 // void begin( const char* auth,
jcm931213 15:544afbc8228f 145 // const char* addr,
jcm931213 15:544afbc8228f 146 // uint16_t port,
jcm931213 15:544afbc8228f 147 // const char* gateway,
jcm931213 15:544afbc8228f 148 // const char* subnet,
jcm931213 15:544afbc8228f 149 // uint8_t mac[] = NULL)
jcm931213 15:544afbc8228f 150 // {
jcm931213 15:544afbc8228f 151 // BLYNK_LOG1(BLYNK_F("Using static IP"));
jcm931213 15:544afbc8228f 152 // eth.init(SelectMacAddress(auth, mac), addr, subnet, gateway);
jcm931213 15:544afbc8228f 153 // if (eth.connect()==-1) {
jcm931213 15:544afbc8228f 154 // //BLYNK_FATAL(BLYNK_F("DHCP Failed!"));
jcm931213 15:544afbc8228f 155 // }
jcm931213 15:544afbc8228f 156 // // give the Ethernet shield a second to initialize:
jcm931213 15:544afbc8228f 157 // ::delay(1000);
jcm931213 15:544afbc8228f 158 // char* myip = eth.getIPAddress();
jcm931213 15:544afbc8228f 159 // //BLYNK_LOG_IP("IP:", myip);
jcm931213 15:544afbc8228f 160 //
jcm931213 15:544afbc8228f 161 // config(auth, addr, port);
jcm931213 15:544afbc8228f 162 // while(this->connect() != true) {}
jcm931213 15:544afbc8228f 163 // }
jcm931213 15:544afbc8228f 164
jcm931213 15:544afbc8228f 165
jcm931213 15:544afbc8228f 166
jcm931213 15:544afbc8228f 167
jcm931213 15:544afbc8228f 168 private:
jcm931213 15:544afbc8228f 169
jcm931213 15:544afbc8228f 170 uint8_t* SelectMacAddress(const char* token, const uint8_t mac[])
jcm931213 15:544afbc8228f 171 {
jcm931213 15:544afbc8228f 172 if (mac != NULL) {
jcm931213 15:544afbc8228f 173 return (uint8_t*)mac;
jcm931213 15:544afbc8228f 174 }
jcm931213 15:544afbc8228f 175
jcm931213 15:544afbc8228f 176 macAddress[0] = 0x00;
jcm931213 15:544afbc8228f 177 macAddress[1] = 0x08;
jcm931213 15:544afbc8228f 178 macAddress[2] = 0xdc;
jcm931213 15:544afbc8228f 179 macAddress[3] = 0x93;
jcm931213 15:544afbc8228f 180 macAddress[4] = 0x12;
jcm931213 15:544afbc8228f 181 macAddress[5] = 0x13;
jcm931213 15:544afbc8228f 182
jcm931213 15:544afbc8228f 183 int len = strlen(token);
jcm931213 15:544afbc8228f 184 int mac_index = 1;
jcm931213 15:544afbc8228f 185 for (int i=0; i<len; i++) {
jcm931213 15:544afbc8228f 186 macAddress[mac_index++] ^= token[i];
jcm931213 15:544afbc8228f 187
jcm931213 15:544afbc8228f 188 if (mac_index > 5) { mac_index = 1; }
jcm931213 15:544afbc8228f 189 }
jcm931213 15:544afbc8228f 190 /* BLYNK_LOG("MAC: %02X-%02X-%02X-%02X-%02X-%02X",
jcm931213 15:544afbc8228f 191 macAddress[0], macAddress[1],
jcm931213 15:544afbc8228f 192 macAddress[2], macAddress[3],
jcm931213 15:544afbc8228f 193 macAddress[4], macAddress[5]);
jcm931213 15:544afbc8228f 194 */
jcm931213 15:544afbc8228f 195 return macAddress;
jcm931213 15:544afbc8228f 196 }
jcm931213 15:544afbc8228f 197
jcm931213 15:544afbc8228f 198 private:
jcm931213 15:544afbc8228f 199 uint8_t macAddress[6];
jcm931213 15:544afbc8228f 200
jcm931213 15:544afbc8228f 201 };
jcm931213 15:544afbc8228f 202
jcm931213 15:544afbc8228f 203
jcm931213 15:544afbc8228f 204 static BlynkMbedClient _blynkTransport;
jcm931213 15:544afbc8228f 205 BlynkEthernet Blynk(_blynkTransport);
jcm931213 15:544afbc8228f 206
jcm931213 15:544afbc8228f 207
jcm931213 15:544afbc8228f 208 #include <BlynkWidgets.h>
jcm931213 15:544afbc8228f 209
jcm931213 15:544afbc8228f 210 #endif