Skip to content

Category: 物联网开发

ESP8266/ESP8285开发:如何配置ESP8266/ESP8285连接到无线路由器?

ESP8266/ESP8285开发:如何配置ESP8266/ESP8285连接到无线路由器?
有关配置连接无线路由器,一般有以下几种方式:
1.SmartConfig 一键配置方式,设备在 sniffer 模式扫描特征包的方式。
2.设备开启 SoftAP,手机连接 SoftAP 后建立稳定的 TCP/UDP 连接后,发送 SSID 和密码。
3.WPS 配置方式,此方式需要设备中增加按键;或连接到设备的 SoftAP 后使用手机软件控制开启 WPS。

Comments closed

ESP8266/ESP8285开发:测试和生产时如何烧录 Flash?

ESP8266/ESP8285开发:测试和生产时如何烧录 Flash?
测试时,通过 UART 转 USB 芯片,使用乐鑫提供的 Flash 下载工具进行烧录,具体方法参见文档《ESP8266 SDK 入门指南》。
下载工具:http://espressif.com/zh-hans/support/download/other-tools
下载方法:http://espressif.com/zh-hans/support/download/documents

Comments closed

ESP8266/ESP8285开发:如何优化 ESP8266/ESP8285 应用的内存使用?

ESP8266/ESP8285开发:如何优化 ESP8266/ESP8285 应用的内存使用? 通过以下四种方法可以优化 ESP8266 应用的内存使用,减少应用的内存占用空间。 1. 将字符串放到 Flash 中: (1) 有些字符串可以放在 Flash 中,特别是长字符串,例如 HTML 请求和响应模板。 比如,一个字符串原来是用 define 定义的: #define test_string "hello world” 现在可以定义成如下: static const char test_string[] ICACHE_RODATA_ATTR = "hello world"; (2) 当用 ICACHE_RODATA_ATTR 定义字符串常量时,需要对数据内容进行四字节对齐读取。由于 Flash 中的数据需要四字节对其读取,所以定义一个宏获取对齐后的字符串长度: #define GET_ALIGN_STRING_LEN(str) ((strlen(str) + 3) & ~3) 使用字符串时,动态分配一个新的数组对象,读写 Flash 中的数据。然后用 os_memcpy API 来复制数据内容: unsigned int str_len = GET_ALIGN_STRING_LEN(test_string); char *tmp_string = (char *)os_malloc(str_len); os_memcpy(tmp_string, test_string, str_len); (3) 在用户的应用代码里使用 tmp_string 进行操作,而不使用 test_string。此方法除了减少应用的 RAM 占用空间,也能解决由于对 Flash 中的数据进行非对齐读取时,在应用中引起的 exception。 ……. (4) 当用户代码中,无需再使用通过以上方法读取的数据,需要释放之前分配的内存空间 os_free(tmp_string); 注意:如果不释放之前分配的内存空间,重复分配内存将会减少核心功能所需的内存,导致 API 出现功能异常或失败。 2. 把 const 数据放到 Flash: (1) uint32 类型的数组可以直接放到 Flash,比如: const uint32 array[4] ICACHE_RODATA_ATTR = {0x11111111, 0x22222222, 0x33333333, 0x44444444}; 可以直接使用 array[0]。 (2) 对于 uint8 和 uint16 类型的数组,要注意读取数据的时候要四字节对齐, 比如: const uint8 array[7] ICACHE_RODATA_ATTR = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}; (3) 如果需要按字节读取 char 数组当中的元素,可从软件上进行处理,先按四字节读取,然后再按偏移取当中的一个字节。如果直接读取 array[0],会导致 crash。 (4) 对于数据结构,通常做法是分配比用户需要读取的结构更大的内存,从 Flash 四字节读取数据到内存。如同方法 1,在代码中依然使用对象指针。修改代码操作内存中的数据结构,而不是读取数组。 3. 将调试字符串放到 Flash 中: 现在默认的 printf 打印的字符串都还是放在 RAM 区,占用部分内存。如果用户无需频繁打印日志文件,或者调试字符串太长,可以使用优化的 os_printf 把打印的字符串放到 Flash 而不是 RAM 中。 4. 避免使用全局数组变量: 全局数组变量会在应用的整个生存期中占用不必要的内存。为减少全局数组变量的使用,乐鑫提供了动态内存分配 API。在基于事件的编程中,请使用 os_malloc 和 os_free 来动态分配所需的内存空间。但注意,我们不建议过于频繁地分配和释放大小不等的内存空间。

Leave a Comment

ESP8266/ESP8285开发:上电时电流很大,是什么原因?

ESP8266/ESP8285开发:上电时电流很大,是什么原因?
ESP8266/ESP8285的 RF 和数字电路具有极高的集成度。上电后,RF 自校准会需要大电流。模拟部分电路最大的极限电路可能达到 500 mA;数字电路部分最大电流 达到 200 mA。一般的操作,平均电流在 100 mA 左右。因此,ESP8266/ESP8285需要供电能达到 500 mA,能够保证不会有瞬间压降。

Comments closed

ESP8266/ESP8285开发:ESP8266模块电压电流需求?

ESP8266/ESP8285开发:ESP8266模块电压电流需求?
ESP8266/ESP8285 的数字部分的电压范围是 1.8V ~ 3.3V。
模拟部分的工作电压是 3.0V ~ 3.6V,最低 2.7V。
模拟电源峰值 350 mA。
数字电源峰值 200 mA。
注意:选择的 SPI Flash 工作电压也需要与 GPIO 的电压匹配。
CHIP_EN 还是工作在 3.0 - 3.6V,使用1.8V GPIO 控制时需要注意电平转换。

Comments closed

ESP8266/ESP8285开发:ADC 的精度如何?

ESP8266/ESP8285开发:ADC 的精度如何?
ESP8266/ESP8285 连接路由器后,单 STA 模式会进入 modem_sleep,导致芯片内部电流发生变化,参ESP8266 连接路由器后,单 STA 模式会进入 modem_sleep,导致芯片内部电流发生变化,参考值变化,因此 ADC 采集异常。用户如果需要测量的非常准确,可以用 system_adc_fast_read 的函数,但是测量之前需要关闭 RF,Wi-Fi 连接会断开。如果需要测试比较准确,数值相差 1,或 2,可以配置 Wi-Fi 为 non_sleep 模式 wifi_set_sleep_type(NONE_SLEEP_T);建议该用户这样配置。如果对精确性要求不高,可以允许模块进入 sleep 模式,功耗较低。

Comments closed

ESP8266/ESP8285开发:如何在 AT+ 指令中定义自己的函数?

ESP8266/ESP8285开发:如何在 AT+ 指令中定义自己的函数?
在 Non-OS SDK 中的 AT 示例 (\ESP8266_NONOS_SDK\examples\at\user\user_main.c) 中有提供如何实现一条自定义的 AT 指令“AT+TEST”。结构体 at_funcationType 用于定义一条指令的四种类型,例如指令名称“AT+TEST”。
类型 at_testCmd: 测试指令,对应指令为 AT+TEST=?,AT 示例中注册的实现回调为 at_testCmdTest,测试指令可以设计为返回参数的取值范围;注册为 NULL,则无测试指令。
类型 at_queryCmd: 查询指令,对应指令为 AT+TEST=?,AT 示例中注册的实现回调为 at_queryCmdTest,测试指令可以设计为返回当前值;注册为 NULL,则无测试指令。
类型 at_setupCmd: 设置指令,对应指令格式为 AT+TEST=parameter1,parameter2,……,AT 示例中注册的实现回调为 at_setupCmdTest,设置指令可以设计用于设置参数值;注册为 NULL,则无测试指令。
类型 at_exeCmd: 执行指令,对应指令为 AT+TEST,AT 示例中注册的实现回调为 at_exeCmdTest,执行指令可以设计用于执行某项操作;注册为 NULL,则无测试指令。

Comments closed

ESP8266/ESP8285开发:如何通过 AT 指令发 HTTP 包?

ESP8266/ESP8285开发:如何通过 AT 指令发 HTTP 包?
1. AT 指令配置 SoftAP +Station 模式: AT+CWMODE=3 // set softAP+station mode
2. AT 指令连接路由:AT+CWJAP="SSID","password" // ESP8266 station connect to router
3. 创建 TCP 连接,按照 HTTP 包的格式发送数据,如下图红框标注,请注意,HTTP 包中的换行符 [(0x0d 0x0a) or (CR LF)] 是必须的,不能省去。

Comments closed