#include "ets_sys.h"
#include "osapi.h"
#include "gpio.h"
#include "user_interface.h"
#include "espconn.h"
#include "ip_addr.h"
#include "mem.h"
#include "user_devicefind.h"
#include "user_webserver.h"
#include "pwm.h"
#if ESP_PLATFORM
#include "user_esp_platform.h"
#endif
#if ((SPI_FLASH_SIZE_MAP == 0) || (SPI_FLASH_SIZE_MAP == 1))
#error "The flash map is not supported"
#elif (SPI_FLASH_SIZE_MAP == 2)
#define SYSTEM_PARTITION_OTA_SIZE 0x6A000
#define SYSTEM_PARTITION_OTA_2_ADDR 0x81000
#define SYSTEM_PARTITION_RF_CAL_ADDR 0xfb000
#define SYSTEM_PARTITION_PHY_DATA_ADDR 0xfc000
#define SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR 0xfd000
#define SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM_ADDR 0x7c000
#elif (SPI_FLASH_SIZE_MAP == 3)
#define SYSTEM_PARTITION_OTA_SIZE 0x6A000
#define SYSTEM_PARTITION_OTA_2_ADDR 0x81000
#define SYSTEM_PARTITION_RF_CAL_ADDR 0x1fb000
#define SYSTEM_PARTITION_PHY_DATA_ADDR 0x1fc000
#define SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR 0x1fd000
#define SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM_ADDR 0x7c000
#elif (SPI_FLASH_SIZE_MAP == 4)
#define SYSTEM_PARTITION_OTA_SIZE 0x6A000
#define SYSTEM_PARTITION_OTA_2_ADDR 0x81000
#define SYSTEM_PARTITION_RF_CAL_ADDR 0x3fb000
#define SYSTEM_PARTITION_PHY_DATA_ADDR 0x3fc000
#define SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR 0x3fd000
#define SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM_ADDR 0x7c000
#elif (SPI_FLASH_SIZE_MAP == 5)
#define SYSTEM_PARTITION_OTA_SIZE 0x6A000
#define SYSTEM_PARTITION_OTA_2_ADDR 0x101000
#define SYSTEM_PARTITION_RF_CAL_ADDR 0x1fb000
#define SYSTEM_PARTITION_PHY_DATA_ADDR 0x1fc000
#define SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR 0x1fd000
#define SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM_ADDR 0xfc000
#elif (SPI_FLASH_SIZE_MAP == 6)
#define SYSTEM_PARTITION_OTA_SIZE 0x6A000
#define SYSTEM_PARTITION_OTA_2_ADDR 0x101000
#define SYSTEM_PARTITION_RF_CAL_ADDR 0x3fb000
#define SYSTEM_PARTITION_PHY_DATA_ADDR 0x3fc000
#define SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR 0x3fd000
#define SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM_ADDR 0xfc000
#else
#error "The flash map is not supported"
#endif
#define SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM SYSTEM_PARTITION_CUSTOMER_BEGIN
#define TCP_SERVER_IP "116.62.81.138"
#define qingqiu "GET /v3/weather/now.json?key=smtq3n0ixdggurox&location=beijing&language=en&unit=c HTTP/1.1\r\nHost:api.seniverse.com\r\n\r\n" //请求的接口
uint32 priv_param_start_sec;
static void tcp_client_sent_cb(void *arg);
static void tcp_client_recv_cb(void *arg,char *pdata,unsigned short length);
static void tcp_client_recon_cb(void *arg,sint8 error);
static void tcp_client_discon_cb(void *arg);
static void tcp_client_connect_cb(void *arg);
os_timer_t os_timer; //定时器
static const partition_item_t at_partition_table[] = {
{ SYSTEM_PARTITION_BOOTLOADER, 0x0, 0x1000},
{ SYSTEM_PARTITION_OTA_1, 0x1000, SYSTEM_PARTITION_OTA_SIZE},
{ SYSTEM_PARTITION_OTA_2, SYSTEM_PARTITION_OTA_2_ADDR, SYSTEM_PARTITION_OTA_SIZE},
{ SYSTEM_PARTITION_RF_CAL, SYSTEM_PARTITION_RF_CAL_ADDR, 0x1000},
{ SYSTEM_PARTITION_PHY_DATA, SYSTEM_PARTITION_PHY_DATA_ADDR, 0x1000},
{ SYSTEM_PARTITION_SYSTEM_PARAMETER, SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR, 0x3000},
{ SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM, SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM_ADDR, 0x1000},
};
void ICACHE_FLASH_ATTR user_pre_init(void)
{
if(!system_partition_table_regist(at_partition_table, sizeof(at_partition_table)/sizeof(at_partition_table[0]),SPI_FLASH_SIZE_MAP)) {
os_printf("system_partition_table_regist fail\r\n");
while(1);
}
}
static void ICACHE_FLASH_ATTR
tcp_client_sent_cb(void *arg){
os_printf("tcp client send data successful\r\n");
}
/**
* TCP Client数据接收回调函数,可以在这处理收到Server发来的数据
*/
static void ICACHE_FLASH_ATTR
tcp_client_recv_cb(void *arg,char *pdata,unsigned short len){
os_printf("tcp client receive tcp server data\r\n");
os_printf("length: %d \r\ndata: %s\r\n",len,pdata);
}
static void ICACHE_FLASH_ATTR
tcp_client_recon_cb(void *arg,sint8 error){
os_printf("tcp client connect tcp server error %d\r\n",error);
}
/**
* TCP Client断开连接回调函数
*/
static void ICACHE_FLASH_ATTR
tcp_client_discon_cb(void *arg){
os_printf("tcp client disconnect tcp server successful\r\n");
}
/**
* TCP Client连接成功回调函数
*/
static void ICACHE_FLASH_ATTR
tcp_client_connect_cb(void *arg){
struct espconn *pespconn = arg;
os_printf("tcp client connect tcp server successful\r\n");
espconn_regist_recvcb(pespconn,tcp_client_recv_cb);//注册接收数据回调函数
espconn_regist_sentcb(pespconn,tcp_client_sent_cb);//注册数据发送完成回调函数
espconn_regist_disconcb(pespconn,tcp_client_discon_cb);//注册断开连接回调函数
/*char buffer[1024];
memset(buffer,0,1024);
os_sprintf(buffer,"/v3/weather/now.json?language=en&key=Sn5RsUO2O3kUx9tzO&location=lingao&unit=c","api.seniverse.com");
os_printf("user_esp_platform_connect_cb\r\n");
espconn_send(pespconn,buffer,os_strlen(buffer));*/
espconn_send(pespconn,qingqiu,os_strlen(qingqiu));
}
void ICACHE_FLASH_ATTR
user_set_station_config(void)
{
char ssid[32] ="CLJGO";
char password[64] ="12345678";
struct station_config stationConf;
stationConf.bssid_set = 0; //need not check MAC address of AP
os_memcpy(stationConf.ssid, ssid, 32);
os_memcpy(stationConf.password, password, 64);
wifi_station_set_config(&stationConf);
}
struct espconn tcp_client;
void ICACHE_FLASH_ATTR
tcp_client_init(struct espconn *espconn,uint8 *remote_ip,struct ip_addr *local_ip, int remote_port){
uint32 server_ip = ipaddr_addr(remote_ip);
os_printf("tcp client connect to tcp server\r\n");
espconn->proto.tcp = (esp_tcp *)os_zalloc(sizeof(esp_tcp));
espconn->type = ESPCONN_TCP;
os_memcpy(espconn->proto.tcp->remote_ip,&server_ip,4);//设置要连接的Server IP地址
espconn->proto.tcp->remote_port = remote_port;//设置要连接的Server 端口号
os_memcpy(espconn->proto.tcp->local_ip,local_ip,4);//设置本地IP地址
espconn->proto.tcp->local_port = espconn_port();//设置本地端口号
espconn_regist_connectcb(espconn,tcp_client_connect_cb);//注册连接成功回调函数
espconn_regist_reconcb(espconn,tcp_client_recon_cb);//注册断连重新连接回调函数
espconn_connect(espconn);//Client连接Server
}
void ICACHE_FLASH_ATTR
huidiao(void)
{
os_printf("hello word");
struct ip_info local_ip;
wifi_get_ip_info(STATION_IF,&local_ip);
tcp_client_init(&tcp_client,TCP_SERVER_IP,&local_ip.ip,80);
os_printf("ni hao\n");
os_timer_disarm(&os_timer);
}
void ICACHE_FLASH_ATTR
user_init(void)
{
partition_item_t partition_item;
os_printf("SDK version:%s\n", system_get_sdk_version());
if (!system_partition_get_item(SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM, &partition_item)) {
os_printf("Get partition information fail\n");
}
priv_param_start_sec = partition_item.addr/SPI_FLASH_SEC_SIZE;
os_printf("hello word!");
wifi_set_opmode(STATIONAP_MODE);
user_set_station_config();
os_timer_disarm(&os_timer);
os_timer_setfn(&os_timer,(os_timer_func_t*)huidiao,NULL);
os_timer_arm(&os_timer,10000,1);
}
esp8266tcp连接并获取心之天气
最新推荐文章于 2023-10-27 20:39:04 发布