ワークショップ用のプログラム

Dependencies:   Milkcocoa mbed

Committer:
jksoft
Date:
Thu Sep 22 00:49:42 2016 +0000
Revision:
0:d0b3a5d1ba28
????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jksoft 0:d0b3a5d1ba28 1 /* Copyright (C) 2012 mbed.org, MIT License
jksoft 0:d0b3a5d1ba28 2 *
jksoft 0:d0b3a5d1ba28 3 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
jksoft 0:d0b3a5d1ba28 4 * and associated documentation files (the "Software"), to deal in the Software without restriction,
jksoft 0:d0b3a5d1ba28 5 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
jksoft 0:d0b3a5d1ba28 6 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
jksoft 0:d0b3a5d1ba28 7 * furnished to do so, subject to the following conditions:
jksoft 0:d0b3a5d1ba28 8 *
jksoft 0:d0b3a5d1ba28 9 * The above copyright notice and this permission notice shall be included in all copies or
jksoft 0:d0b3a5d1ba28 10 * substantial portions of the Software.
jksoft 0:d0b3a5d1ba28 11 *
jksoft 0:d0b3a5d1ba28 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
jksoft 0:d0b3a5d1ba28 13 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
jksoft 0:d0b3a5d1ba28 14 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
jksoft 0:d0b3a5d1ba28 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
jksoft 0:d0b3a5d1ba28 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
jksoft 0:d0b3a5d1ba28 17 *
jksoft 0:d0b3a5d1ba28 18 * @section DESCRIPTION
jksoft 0:d0b3a5d1ba28 19 *
jksoft 0:d0b3a5d1ba28 20 * ESP8266 serial wifi module
jksoft 0:d0b3a5d1ba28 21 *
jksoft 0:d0b3a5d1ba28 22 * Datasheet:
jksoft 0:d0b3a5d1ba28 23 *
jksoft 0:d0b3a5d1ba28 24 * http://www.electrodragon.com/w/Wi07c
jksoft 0:d0b3a5d1ba28 25 */
jksoft 0:d0b3a5d1ba28 26
jksoft 0:d0b3a5d1ba28 27 #ifndef ESP8266_H
jksoft 0:d0b3a5d1ba28 28 #define ESP8266_H
jksoft 0:d0b3a5d1ba28 29
jksoft 0:d0b3a5d1ba28 30 #include "mbed.h"
jksoft 0:d0b3a5d1ba28 31 #include "CBuffer.h"
jksoft 0:d0b3a5d1ba28 32
jksoft 0:d0b3a5d1ba28 33 #define DEFAULT_WAIT_RESP_TIMEOUT 500
jksoft 0:d0b3a5d1ba28 34 #define ESP_TCP_TYPE 1
jksoft 0:d0b3a5d1ba28 35 #define ESP_UDP_TYPE 0
jksoft 0:d0b3a5d1ba28 36 #define ESP_MBUFFE_MAX 256
jksoft 0:d0b3a5d1ba28 37
jksoft 0:d0b3a5d1ba28 38 /**
jksoft 0:d0b3a5d1ba28 39 * The ESP8266 class
jksoft 0:d0b3a5d1ba28 40 */
jksoft 0:d0b3a5d1ba28 41 class ESP8266
jksoft 0:d0b3a5d1ba28 42 {
jksoft 0:d0b3a5d1ba28 43
jksoft 0:d0b3a5d1ba28 44 public:
jksoft 0:d0b3a5d1ba28 45 /**
jksoft 0:d0b3a5d1ba28 46 * Constructor
jksoft 0:d0b3a5d1ba28 47 *
jksoft 0:d0b3a5d1ba28 48 * @param tx mbed pin to use for tx line of Serial interface
jksoft 0:d0b3a5d1ba28 49 * @param rx mbed pin to use for rx line of Serial interface
jksoft 0:d0b3a5d1ba28 50 * @param reset reset pin of the wifi module ()
jksoft 0:d0b3a5d1ba28 51 * @param ssid ssid of the network
jksoft 0:d0b3a5d1ba28 52 * @param phrase WEP, WPA or WPA2 key
jksoft 0:d0b3a5d1ba28 53 * @param baud the baudrate of the serial connection
jksoft 0:d0b3a5d1ba28 54 */
jksoft 0:d0b3a5d1ba28 55 ESP8266( PinName tx, PinName rx, PinName reset, const char * ssid, const char * phrase, uint32_t baud );
jksoft 0:d0b3a5d1ba28 56
jksoft 0:d0b3a5d1ba28 57 /**
jksoft 0:d0b3a5d1ba28 58 * Connect the wifi module to the ssid contained in the constructor.
jksoft 0:d0b3a5d1ba28 59 *
jksoft 0:d0b3a5d1ba28 60 * @return true if connected, false otherwise
jksoft 0:d0b3a5d1ba28 61 */
jksoft 0:d0b3a5d1ba28 62 bool join();
jksoft 0:d0b3a5d1ba28 63
jksoft 0:d0b3a5d1ba28 64 /**
jksoft 0:d0b3a5d1ba28 65 * Same as Join: connect to the ssid and get DHCP settings
jksoft 0:d0b3a5d1ba28 66 * @return true if successful
jksoft 0:d0b3a5d1ba28 67 */
jksoft 0:d0b3a5d1ba28 68 bool connect();
jksoft 0:d0b3a5d1ba28 69
jksoft 0:d0b3a5d1ba28 70 /**
jksoft 0:d0b3a5d1ba28 71 * Check connection to the access point
jksoft 0:d0b3a5d1ba28 72 * @return true if successful
jksoft 0:d0b3a5d1ba28 73 */
jksoft 0:d0b3a5d1ba28 74 bool is_connected();
jksoft 0:d0b3a5d1ba28 75
jksoft 0:d0b3a5d1ba28 76 /**
jksoft 0:d0b3a5d1ba28 77 * Disconnect the ESP8266 module from the access point
jksoft 0:d0b3a5d1ba28 78 *
jksoft 0:d0b3a5d1ba28 79 * @return true if successful
jksoft 0:d0b3a5d1ba28 80 */
jksoft 0:d0b3a5d1ba28 81 bool disconnect();
jksoft 0:d0b3a5d1ba28 82
jksoft 0:d0b3a5d1ba28 83 /*
jksoft 0:d0b3a5d1ba28 84 * Start up a UDP or TCP Connection
jksoft 0:d0b3a5d1ba28 85 * @param type 0 for UDP, 1 for TCP
jksoft 0:d0b3a5d1ba28 86 * @param ip A string that contains the IP, no quotes
jksoft 0:d0b3a5d1ba28 87 * @param port Numerical port number to connect to
jksoft 0:d0b3a5d1ba28 88 * @param id number between 0-4, if defined it denotes ID to use in multimode (Default to Single connection mode with -1)
jksoft 0:d0b3a5d1ba28 89 * @return true if sucessful, 0 if fail
jksoft 0:d0b3a5d1ba28 90 */
jksoft 0:d0b3a5d1ba28 91 bool start(bool type, char* ip, int port, int id = -1);
jksoft 0:d0b3a5d1ba28 92
jksoft 0:d0b3a5d1ba28 93 /*
jksoft 0:d0b3a5d1ba28 94 * Legacy Start for UDP only connection in transparent mode
jksoft 0:d0b3a5d1ba28 95 * @param ip A string that contains the IP, no quotes
jksoft 0:d0b3a5d1ba28 96 * @param id number between 0-4
jksoft 0:d0b3a5d1ba28 97 * @param port Numerical port number to connect to
jksoft 0:d0b3a5d1ba28 98 * @param length number of characters in the message being sent
jksoft 0:d0b3a5d1ba28 99 */
jksoft 0:d0b3a5d1ba28 100 bool startUDP(char* ip, int port, int id, int length);
jksoft 0:d0b3a5d1ba28 101
jksoft 0:d0b3a5d1ba28 102 /*
jksoft 0:d0b3a5d1ba28 103 * Legacy Start for UDP only connection in transparent mode
jksoft 0:d0b3a5d1ba28 104 * @param ip A string that contains the IP, no quotes
jksoft 0:d0b3a5d1ba28 105 * @param id number between 0-4
jksoft 0:d0b3a5d1ba28 106 * @param port Numerical port number to connect to
jksoft 0:d0b3a5d1ba28 107 * @param length number of characters in the message being sent
jksoft 0:d0b3a5d1ba28 108 */
jksoft 0:d0b3a5d1ba28 109 //bool startUDP(char* ip, int port, int id, int length);
jksoft 0:d0b3a5d1ba28 110
jksoft 0:d0b3a5d1ba28 111 /*
jksoft 0:d0b3a5d1ba28 112 *Starts the ESP chip as a TCP Server
jksoft 0:d0b3a5d1ba28 113 *@param port Numerical port of the server, default is 333
jksoft 0:d0b3a5d1ba28 114 */
jksoft 0:d0b3a5d1ba28 115 bool startTCPServer(int port = 333);
jksoft 0:d0b3a5d1ba28 116
jksoft 0:d0b3a5d1ba28 117 /**
jksoft 0:d0b3a5d1ba28 118 * Close a connection
jksoft 0:d0b3a5d1ba28 119 *
jksoft 0:d0b3a5d1ba28 120 * @return true if successful
jksoft 0:d0b3a5d1ba28 121 */
jksoft 0:d0b3a5d1ba28 122 bool close();
jksoft 0:d0b3a5d1ba28 123
jksoft 0:d0b3a5d1ba28 124 /**
jksoft 0:d0b3a5d1ba28 125 * Return the IP address
jksoft 0:d0b3a5d1ba28 126 * @return IP address as a string
jksoft 0:d0b3a5d1ba28 127 */
jksoft 0:d0b3a5d1ba28 128 char* getIPAddress();
jksoft 0:d0b3a5d1ba28 129
jksoft 0:d0b3a5d1ba28 130 /**
jksoft 0:d0b3a5d1ba28 131 * Return the IP address from host name
jksoft 0:d0b3a5d1ba28 132 * @return true on success, false on failure
jksoft 0:d0b3a5d1ba28 133 */
jksoft 0:d0b3a5d1ba28 134 bool gethostbyname(const char * host, char * ip);
jksoft 0:d0b3a5d1ba28 135
jksoft 0:d0b3a5d1ba28 136 /**
jksoft 0:d0b3a5d1ba28 137 * Reset the wifi module
jksoft 0:d0b3a5d1ba28 138 */
jksoft 0:d0b3a5d1ba28 139 void reset();
jksoft 0:d0b3a5d1ba28 140
jksoft 0:d0b3a5d1ba28 141 /**
jksoft 0:d0b3a5d1ba28 142 * Reboot the wifi module
jksoft 0:d0b3a5d1ba28 143 */
jksoft 0:d0b3a5d1ba28 144 bool reboot();
jksoft 0:d0b3a5d1ba28 145
jksoft 0:d0b3a5d1ba28 146 /**
jksoft 0:d0b3a5d1ba28 147 * Check if characters are available
jksoft 0:d0b3a5d1ba28 148 *
jksoft 0:d0b3a5d1ba28 149 * @return number of available characters
jksoft 0:d0b3a5d1ba28 150 */
jksoft 0:d0b3a5d1ba28 151 int readable();
jksoft 0:d0b3a5d1ba28 152
jksoft 0:d0b3a5d1ba28 153 /**
jksoft 0:d0b3a5d1ba28 154 * Check if characters are available
jksoft 0:d0b3a5d1ba28 155 *
jksoft 0:d0b3a5d1ba28 156 * @return number of available characters
jksoft 0:d0b3a5d1ba28 157 */
jksoft 0:d0b3a5d1ba28 158 int writeable();
jksoft 0:d0b3a5d1ba28 159
jksoft 0:d0b3a5d1ba28 160 /**
jksoft 0:d0b3a5d1ba28 161 * Read a character
jksoft 0:d0b3a5d1ba28 162 *
jksoft 0:d0b3a5d1ba28 163 * @return the character read
jksoft 0:d0b3a5d1ba28 164 */
jksoft 0:d0b3a5d1ba28 165 char getc();
jksoft 0:d0b3a5d1ba28 166
jksoft 0:d0b3a5d1ba28 167 /**
jksoft 0:d0b3a5d1ba28 168 * Write a character
jksoft 0:d0b3a5d1ba28 169 *
jksoft 0:d0b3a5d1ba28 170 * @param the character which will be written
jksoft 0:d0b3a5d1ba28 171 */
jksoft 0:d0b3a5d1ba28 172 int putc(char c);
jksoft 0:d0b3a5d1ba28 173
jksoft 0:d0b3a5d1ba28 174 /**
jksoft 0:d0b3a5d1ba28 175 * Flush the buffer
jksoft 0:d0b3a5d1ba28 176 */
jksoft 0:d0b3a5d1ba28 177 void flush();
jksoft 0:d0b3a5d1ba28 178
jksoft 0:d0b3a5d1ba28 179 /**
jksoft 0:d0b3a5d1ba28 180 * Send a command to the wifi module. Check if the module is in command mode. If not enter in command mode
jksoft 0:d0b3a5d1ba28 181 *
jksoft 0:d0b3a5d1ba28 182 * @param str string to be sent
jksoft 0:d0b3a5d1ba28 183 * @param ACK string which must be acknowledge by the wifi module. If ACK == NULL, no string has to be acknowledged. (default: "NO")
jksoft 0:d0b3a5d1ba28 184 * @param res this field will contain the response from the wifi module, result of a command sent. This field is available only if ACK = "NO" AND res != NULL (default: NULL)
jksoft 0:d0b3a5d1ba28 185 *
jksoft 0:d0b3a5d1ba28 186 * @return true if successful
jksoft 0:d0b3a5d1ba28 187 */
jksoft 0:d0b3a5d1ba28 188 bool sendCommand(const char * cmd, const char * ack = NULL, char * res = NULL, int timeout = DEFAULT_WAIT_RESP_TIMEOUT);
jksoft 0:d0b3a5d1ba28 189
jksoft 0:d0b3a5d1ba28 190 /**
jksoft 0:d0b3a5d1ba28 191 * Send a string to the wifi module by serial port. This function desactivates the user interrupt handler when a character is received to analyze the response from the wifi module.
jksoft 0:d0b3a5d1ba28 192 * Useful to send a command to the module and wait a response.
jksoft 0:d0b3a5d1ba28 193 *
jksoft 0:d0b3a5d1ba28 194 *
jksoft 0:d0b3a5d1ba28 195 * @param str string to be sent
jksoft 0:d0b3a5d1ba28 196 * @param len string length
jksoft 0:d0b3a5d1ba28 197 * @param ACK string which must be acknowledge by the wifi module. If ACK == NULL, no string has to be acknoledged. (default: "NO")
jksoft 0:d0b3a5d1ba28 198 * @param res this field will contain the response from the wifi module, result of a command sent. This field is available only if ACK = "NO" AND res != NULL (default: NULL)
jksoft 0:d0b3a5d1ba28 199 *
jksoft 0:d0b3a5d1ba28 200 * @return true if ACK has been found in the response from the wifi module. False otherwise or if there is no response in 5s.
jksoft 0:d0b3a5d1ba28 201 */
jksoft 0:d0b3a5d1ba28 202 int send(const char * buf, int len);
jksoft 0:d0b3a5d1ba28 203
jksoft 0:d0b3a5d1ba28 204 static ESP8266 * getInstance() {
jksoft 0:d0b3a5d1ba28 205 return inst;
jksoft 0:d0b3a5d1ba28 206 };
jksoft 0:d0b3a5d1ba28 207
jksoft 0:d0b3a5d1ba28 208 protected:
jksoft 0:d0b3a5d1ba28 209 int strfind(const char *str,const char *chkstr,int pos=0);
jksoft 0:d0b3a5d1ba28 210 char* substr(const char *str , char *outstr , int pos1 , int pos2 );
jksoft 0:d0b3a5d1ba28 211 int strcount(const char *str , char countstr );
jksoft 0:d0b3a5d1ba28 212
jksoft 0:d0b3a5d1ba28 213
jksoft 0:d0b3a5d1ba28 214 RawSerial wifi;
jksoft 0:d0b3a5d1ba28 215 DigitalOut reset_pin;
jksoft 0:d0b3a5d1ba28 216 char phrase[30];
jksoft 0:d0b3a5d1ba28 217 char ssid[30];
jksoft 0:d0b3a5d1ba28 218 char ipString[20];
jksoft 0:d0b3a5d1ba28 219 CircBuffer<char> buf_ESP8266;
jksoft 0:d0b3a5d1ba28 220
jksoft 0:d0b3a5d1ba28 221 static ESP8266 * inst;
jksoft 0:d0b3a5d1ba28 222
jksoft 0:d0b3a5d1ba28 223 void attach_rx(bool null);
jksoft 0:d0b3a5d1ba28 224 void handler_rx(void);
jksoft 0:d0b3a5d1ba28 225
jksoft 0:d0b3a5d1ba28 226
jksoft 0:d0b3a5d1ba28 227 typedef struct STATE {
jksoft 0:d0b3a5d1ba28 228 bool associated;
jksoft 0:d0b3a5d1ba28 229 bool cmdMode;
jksoft 0:d0b3a5d1ba28 230 } State;
jksoft 0:d0b3a5d1ba28 231
jksoft 0:d0b3a5d1ba28 232 State state;
jksoft 0:d0b3a5d1ba28 233 };
jksoft 0:d0b3a5d1ba28 234
jksoft 0:d0b3a5d1ba28 235 #endif