查看迷你看门狗的源代码
←
迷你看门狗
跳转到:
导航
,
搜索
因为以下原因,你没有权限编辑本页:
您刚才请求的操作只有这个用户组中的用户才能使用:
用户
您可以查看并复制此页面的源代码:
== 主控SoC == === 概述 === ;; Tensilica Xtensa LX3 32-bit RISC SOC clocked at 80 MHz [[文件:Tensilica-xtensalx3.jpg]] * 32-bit ALU * 16, 32 or 64 GPR * six special purpose registers * 80 base instructions The Xtensa ISA employs 24-bit instructions with 16-bit narrow encodings for the most common instructions. <br><br> === 管脚定义 === [[文件:Esp8266ex-layout.jpg | 360px]] * PIN8 --- GPIO16 / Deep-Sleep Wakeup * PIN9 --- GPIO14 / HSPICLK * PIN10 --- GPIO12 / HSPIQ * PIN12 --- GPIO13 / HSPID * PIN13 --- GPIO15 / HSPICS * PIN14 --- GPIO2 / UART TX during flash programming * PIN15 --- GPIO0 / SPICS2 * PIN16 --- GPIO4 * PIN24 --- GPIO5 * PIN25 --- GPIO3 / UART RX during flash programming / URXD * PIN26 --- GPIO1 / SPICS1 / UTXD <br><br> === Toolchain === * https://github.com/jcmvbkbc/gcc-xtensa <br><br> == 基本布局 == 一个蓝色高亮 LED,接着 UTXD 上 一颗 12V 电池 一个 SPI Flash 一颗 8266 重启拔电池即可 官方参考设计: [[文件:Esp8266-ref-sch.png]] [[文件:SPI.module.jpg]] <pre> UTX / GPIO1 GPIO2 --- Blue LED (WiFi Status) GPIO0 URX / GPIO3 </pre> <br><br> == Web Server API == === client info === <source lang=bash> $ curl -X GET http://192.168.1.112/client?command=info { "Version":{ "hardware":"0.3", "software":"0.9.3" }, "Device":{ "product":"Humiture", "manufacturer":"Espressif Systems" } } </source> <br><br> === client status === <source lang=bash> $ curl -X GET http://192.168.1.112/client?command=status { "Status":{ "status":40 } } </source> <br><br> === client scan === <source lang=bash> $ curl -X GET http://192.168.1.112/client?command=scan { "Response":{ "TotalPage":2 } } </source> <br><br> === config wifi === <source lang=bash> $ curl -X GET http://192.168.1.112/config?command=wifi { "Response":{ "Station":{ "Connect_Station":{ "ssid":"HOME-WIFI", "password":"xxxxxxxx" }, "Ipinfo_Station":{ "ip":"192.168.1.112", "mask":"255.255.255.0", "gw":"192.168.1.1" } }, "Softap":{ "Connect_Softap":{ "authmode":"OPEN", "channel":11, "ssid":"ESP_9CCF90", "password":"" }, "Ipinfo_Softap":{ "ip":"192.168.4.1", "mask":"255.255.255.0", "gw":"192.168.4.1" } } } </source> <br><br> === config switch === <source lang=bash> $ curl -X GET http://192.168.1.112/config?command=switch { "Response":{ "status":0 } } $ curl -X POST -d '{"Request":{"status": 3}}' http://192.168.1.112/config?command=switch </source> <br><br> === config light === <source lang=bash> $ curl -X GET http://192.168.1.112/config?command=light { "freq":0, "rgb":{ "red":0, "green":0, "blue":0 } } </source> <br><br> === config reboot === <source lang=bash> $ curl -X GET http://192.168.1.112/config?command=reboot </source> <br><br> === config sleep === <source lang=bash> $ curl -X POST http://192.168.1.112/config?command=sleep </source> <br><br> === 设置 station 模式 === 设备默认为softAP模式,设置 station 模式需先用PC或手机 WiFi 连接到设备,然后从手机或PC端发送下述指令: <source lang=bash> $ curl -X POST -H "Content-Type:application/json" -d '{"Request":{"Station": {"Connect_Station":{"ssid":"comcat","password":"12345678"}}}}' http://192.168.1.112/config?command=wifi </source> 设置完成后设备自动重启,进入station 模式,并自动去连接所设置的路由 注:token 字段和espressif 服务器架构相关,是随机的长度为40 的 <br><br> === 设置 softAP 模式 === 设备发送如下指令,从 station 模式切回 softAP 模式: <source lang=bash> $ curl -X POST -H "Content-Type:application/json" -d ' \ {"Request":{"Softap":{"Connect_Softap":{"authmode":"OPEN","channel":6,"ssid":"mini-CamGo","password":""}}}}' \ http://192.168.10.213/config?command=wifi </source> 注意: * Authmode 支持OPEN、WPAPSK、WPA2PSK、WPAPSK/WPA2PSK。 * password 长度需不小于8 个字符 <br><br> === 恢复出厂设置 === <source lang=bash> $ curl -X POST -H "Content-Type:application/json" -d '{"factory":1}' http://IP/config?command=param </source> <br><br> === 系统复位 === <source lang=bash> $ curl -X POST -H "Content-Type:application/json" -d '{"reset":1}' http://IP/config?command=param </source> <br><br> === 获取模块上电运行时间 === <source lang=bash> $ curl -X GET http://IP/config?command=systime </source> <br><br> === 串口波特率 === <source lang=bash> $ curl -X POST -H "Content-Type:application/json" -d '{" uartbaud":baudrate}' http://IP/config?command=param </source> 其中baudrate 代表要设置的波特率。 { “response”:{ “systime”:11111 } } <br><br> === 设置dataserver 端口 === <source lang=bash> $ curl -X POST -H "Content-Type:application/json" -d '{" dataport":port}' http://IP/config?command=param </source> 其中port 代表要设置的端口号 <br><br> == SDK API == === GPIO === ==== PIN Macro ==== PIN_PULLUP_DIS(PERIPHS_IO_MUX_GPIO2_U); PIN_PULLUP_EN(PERIPHS_IO_MUX_GPIO4_U); PIN_PULLDWN_DIS(PERIPHS_IO_MUX_U0TXD_U); PIN_PULLDWN_EN(PERIPHS_IO_MUX_GPIO5_U); PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U, FUNC_GPIO12); // 选择 MTDI 脚复用为 GPIO12,大量管脚有多个功能,需用此宏选择具体的管脚功能 参考 SDK_DIR/include/eagle_soc.h <br><br> ==== gpio_output_set ==== gpio_output_set(u32 set_mask, u32 clear_mask, u32 enable_mask, u32 disable_mask) * set_mask: 设置输出为高的位,对应位为 1 输出高,对应位为 0 不改变状态 * clear_mask: 设置输出为低的位,对应位为 1 输出低,对应位为 0 不改变状态 * enable_mask: 设置使能输出的位 * disable_mask: 设置使能输入的位 <source lang=cpp> #include <gpio.h> // Initialize the GPIO subsystem. gpio_init(); GPIO_REG_READ(GPIO_OUT_ADDRESS) & BIT2 == 1 //Set GPIO2 to output mode PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_GPIO2); //Set GPIO2 low gpio_output_set(0, BIT2, BIT2, 0); //Set GPIO0 to HIGH gpio_output_set(BIT2, 0, BIT2, 0); //Set GPIO12 to HIGH, GPIO13 to LOW gpio_output_set(BIT12, BIT13, BIT12|BIT13, 0); </source> 有个简化的宏:GPIO_OUTPUT_SET(gpio_no, bit_value); 还有一个: GPIO_DIS_OUTPUT(gpio_no); <source lang=cpp> GPIO_OUTPUT_SET(0, 1); // set gpio0 to 1 GPIO_DIS_OUTPUT(0); // disable the GPIO0 output (change to input) </source> <br><br> ==== GPIO_INPUT_GET ==== GPIO_INPUT_GET(gpio_no); GPIO_INPUT_GET(2); 等效于: GPIO_REG_READ(GPIO_OUT_ADDRESS) & BIT2 <br><br> ==== GPIO 中断相关 ==== <source lang=c> ETS_GPIO_INTR_ATTACH(func, arg); ETS_GPIO_INTR_DISABLE(); EST_GPIO_INTR_ENABLE(); void gpio_pin_intr_state_set(u32 gpio_no, GPIO_INT_TYPE stat); typedef enum { GPIO_PIN_INTR_DISABLE = 0, GPIO_PIN_INTR_POSEDGE = 1, GPIO_PIN_INTR_NEGEDGE = 2, GPIO_PIN_INTR_ANYEDGE = 3, GPIO_PIN_INTR_LOLEVEL = 4, GPIO_PIN_INTR_HILEVEL =5 } GPIO_INT_TYPE; /* * Register an application-specific interrupt handler for GPIO pin * interrupts. Once the interrupt handler is called, it will not * be called again until after a call to gpio_intr_ack. Any GPIO * interrupts that occur during the interim are masked. * * The application-specific handler is called with a mask of * pending GPIO interrupts. After processing pin interrupts, the * application-specific handler may wish to use gpio_intr_pending * to check for any additional pending interrupts before it returns. */ void gpio_intr_handler_register(gpio_intr_handler_fn_t fn, void *arg); typedef void (* gpio_intr_handler_fn_t)(uint32 intr_mask, void *arg); /* Determine which GPIO interrupts are pending. */ uint32 gpio_intr_pending(void); /* * Acknowledge GPIO interrupts. * Intended to be called from the gpio_intr_handler_fn. */ void gpio_intr_ack(uint32 ack_mask); void gpio_pin_wakeup_enable(uint32 i, GPIO_INT_TYPE intr_state); void gpio_pin_wakeup_disable(); </source> GPIO 中断处理: <source lang=c> uint32 gpio_status; gpio_status = GPIO_REG_READ(GPIO_STATUS_ADDRESS); //clear interrupt status GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS, gpio_status); </source> <br><br> == Flash Layout == ;; * Without OTA Upgrade: <pre> Address Size Name Description 00000h 4k boot.bin Bootloader 3C000h 14k Param Start Sector 3D000h 1x4k Param Saved 0 3E000h 1x4k Param Saved 1 3F000h 1x4k Param Flag 40000h 240k app.v6.irom0text.bin SDK libraries 7C000h 8k esp_init_data_default.bin Default configuration 7E000h 8k blank.bin Filled with FFh. May be WiFi configuration </pre> <s>出厂时,Param_Saved0 写入 sn,activeflag=0, token为空,pubkey为空 APP 传递 AP ssid 和 password 时,同时调用web api,将生成的 prikey & pubkey 传给 mini,mini收到后,将 prikey 写入 flash 的 token 域,pubkey 写入pubkey</s> 出厂时,Param_Saved0 写入 sn, pubkey, MAC, activeflag=0 APP 传递 AP ssid 和 password 即完成添加,X2 连上 WiFi 后,向云端 push 一条消息,告诉云端:“我已激活” 即OK <s>激活时,将 sn, pubkey, mac 作为参数传给云端</s> 激活时,将 sn 与 token 作为参数传给云端 <br><br> == FW 设计 == Flash 存 SN, PubKey, MAC; 额外留一个 active flag 位,初始值为 0xFF / 0x00 有 key 的设备,长按则恢复出厂设置,即:清除配置的 ssid & password,置 active flag 为 0 设置 activeflag 为 0 伴谁的操作就是: <source lang=cpp> cos_set_active(0); system_restore(); system_restart(); </source> 然后系统重新启动,进入 cos_init() 判断 activeflag 为 0 则 wifi_set_opmode(STATIONAP_MODE); 等待直连,设置 ssid & password <br><br> == 资源 == * https://github.com/espressif/esp_iot_rtos_sdk * https://github.com/espressif * https://github.com/esp8266/esp8266-wiki/wiki * https://github.com/jcmvbkbc/gcc-xtensa * https://github.com/tommie/esptool-ck <br><br> <br><br> <br><br> <br><br> <br><br> <br><br> <br><br> <br><br>
返回到
迷你看门狗
。
个人工具
登录
名字空间
页面
讨论
变换
查看
阅读
查看源代码
查看历史
操作
搜索
导航
首页
社区专页
新闻动态
最近更改
随机页面
帮助
工具箱
链入页面
相关更改
特殊页面