Blynk example
Dependents: Blynk_Example_WIZwiki-W7500
Fork of Blynk by
BlynkSimpleEthernet2.h@15:544afbc8228f, 2017-08-02 (annotated)
- 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?
User | Revision | Line number | New 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 |