极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14623|回复: 4

漫谈Microduino ESP8266 编译烧写配置Tisan固件

[复制链接]
发表于 2015-12-19 13:08:58 | 显示全部楼层 |阅读模式
本帖最后由 topdog 于 2016-1-2 23:45 编辑

     上一节我们讨论了Microduino ESP8266购买地址 At命令固件的烧写。http://www.geek-workshop.com/thread-15703-1-1.html有的小伙伴发现了问题提醒我,不用焊接的方法可以烧写固件吗?大家看了下面的照片就明白了。把ESP8266芯片和ETOH刷机伴侣购买地址叠层,然后用杜邦跳线把GPIO0和GND连接起来,这样用烧录软件就可以把固件烧写到flash里面去了。GPIO0、GPIO2高电平,GPIO15低电平,模块处在工作状态。GPIO15可以复用输出,板子上GPIO12,GPIO13,GPIO14引出除具有普通管脚的作用外,还具有SPI,PWM功能。

   

跳线

跳线


     目前ESP8266的玩法有很多,从固件的种类不同大致可以分为:1,AT固件方法是使用Arduino mcu结合刷了At命令的ESP8266一起来实现物联;2,NodeMCU固件的方法指在ESP8266上先刷NodeMCU固件,再用Arduino IDE for ESP8266,编译程序刷写到相应的flash区间来实现控制。另外此固件还可以用NodeMcu Studio 2015或LuaLoader采取LUA语言编写程序来实现物联;3,SDK的方法是指用乐鑫,安信可,果云科技等提供的sdk建立project结合eclipse和cygwin来产生固件烧写,这种方法采用的是c、c++语言。目前国内有机智云、氦氪云(HEKR)、攀多物联(tisan)等都是采用这种方法实现。4,Micropython的方法和前面的方法有所相似,先用Micropython SDK编译和烧写固件再用putty或其他串口软件按照python语言写运行程序。
      本节我们主要讲SDK的方法,结合攀多物联(tisan)把固件移植到Microduino ESP8266上,做一个DHT11温度湿度在安卓手机上显示的应用。
      Tisan 是面向开源的可产品化的物联网开发板,有硬件(Tisan开发板,当前核心模块基于ESP8266,一款SOC的WIFI芯片)以及软件(固件、云端编辑WebIDE、手机应用程序FreeIOT、微信应用、平台服务等)。他是基于乐鑫、安信可的SDK和MQTT协议的攀多物联网应用。Pando 物联网开发框架总体分为应用层、接入层和硬件层。理论性的探究请参考:https://sw0813.gitbooks.io/tisan-doc/content/

       pando_framework.png

首先,下载并且解压SDK:  http://pan.baidu.com/s/1bohGNXt
其次,下载tisan的demo:   https://github.com/tisan-kit/tisan-demo   把tisan-demo解压到SDK/project目录下,重命名为temperature-humiture-demo
第三,安装Google Chrome,因为攀多物联要使用WebIDE,其他的浏览器暂不支持,必须的。
第四,Google Chrome打开http://tisan.pandocloud.com/,注册,登录。在工作区选择添加产品,那么这时候就会配置给你这个产品的key。
      
       添加产品.JPG

接着,在名称栏填写,在组件选择温度和湿度。
      
       名称.JPG

第五,打开安信可SDK文件夹,双击ESP8266IDE,第一步配置workspace,第二步File/import,小伙伴们试着操作一下这两步吧。
   
      import.JPG

      import existing code.JPG    

第六,打开app/user/objects/device_config.h 把第三步获得的key粘贴替换掉原来的(红色部分)。这个key具有唯一性,确保了物联网终端子设备的安全性。保存!
   
      修改key.JPG

第七,打开app/user_main.c,用下列程序将原来的文件替换掉,配置按键我用的是GPIO14。保存!

#include "../peripheral/driver/uart.h"
#include "os_type.h"
#include "user_interface.h"
#include "../peripheral/peri_key.h"
#include "wifi_config.h"
#include "../pando/pando_framework.h"
#include "objects/temperature.h"
#include "objects/humiture.h"


/******************************************************************************
* FunctionName : user_init
* Description  : entry of user application, init user function here
* Parameters   : none
* Returns      : none
*******************************************************************************/
void user_init(void)
{
        uart_init(115200, 115200); // serial bound rate:11520.
        //long press gpio4, enter into wifi config mode.
        peri_config_key_init(14);
        base_keys_init();
        // add you object init here.
        temperature_object_init();
        humiture_object_init();
        pando_framework_init();
}

第八步,配置temperature_object_init,选中按F3,IDE会自动跟踪并且显示代码或者回调函数,同时打开谷歌浏览器工作区组件温度,会显示temperature.c和temperature.h代码,在此把WebIDE和IDE的temperature.c和temperature.h代码两个对比一下,看看有没有遗漏。手机上显示温度在湿度前面,排行第一:)那么#define TEMPERATURE_OBJECT_NO 1 ,此外DHT11的输入脚连接到GPIO12,那么dht_sensor.pin = 12 ,修改后不要忘记保存!

         温度.JPG


#include "../../peripheral/peri_dht1122.h"
#include "../../pando/pando_object.h"
#include "c_types.h"
#include "user_interface.h"
#include "temperature.h"
// add your own includes below
#define TEMPERATURE_OBJECT_NO 1

struct temperature {
        uint8 centigrade;
};
void ICACHE_FLASH_ATTR
temperature_init() {
        // TODO: add your object init code here.

        DHT_Sensor dht_sensor;
        dht_sensor.pin = 12;
        dht_sensor.type = DHT11;
        peri_dht_init(&dht_sensor);
}
void ICACHE_FLASH_ATTR
temperature_set(struct temperature* value) {
        // TODO: implement object set function here.
        // the set function read value and operate the hardware.


}
void ICACHE_FLASH_ATTR
temperature_get(struct temperature* value) {
        // TODO: implement object get  function here
        // get function retrieve hardware status and assign it to value.

        DHT_Sensor_Data output;
    peri_dht_read(&output);
    value->centigrade = output.temperature;
}
/*
        auto generated code below!!
        DO NOT edit unless you know how it works.
*/
struct temperature* ICACHE_FLASH_ATTR
create_temperature() {
        struct temperature* temperature = (struct temperature*)os_malloc(sizeof(temperature));
        return temperature;
}
void ICACHE_FLASH_ATTR
delete_temperature(struct temperature* temperature) {
        if(temperature){
                os_free(temperature);
        }
}
void ICACHE_FLASH_ATTR
temperature_object_pack(PARAMS * params) {
        if(NULL == params){
                PRINTF("Create first tlv param failed.\n");
                return;
        }

        struct temperature* temperature = create_temperature();
        temperature_get(temperature);

        if (add_next_float32(params, temperature->centigrade)){
                PRINTF("Add next param failed.\n");
                return;
        }

        delete_temperature(temperature);
}
void ICACHE_FLASH_ATTR
temperature_object_unpack(PARAMS* params) {
        struct temperature* temperature = create_temperature();

        temperature->centigrade = get_next_float32(params);

        temperature_set(temperature);
        delete_temperature(temperature);
}
void ICACHE_FLASH_ATTR
temperature_object_init() {
        temperature_init();
        pando_object temperature_object = {
                TEMPERATURE_OBJECT_NO,
                temperature_object_pack,
                temperature_object_unpack,
        };
        register_pando_object(temperature_object);
}
     
第九,配置humiture_object_init,选中按F3,IDE会自动跟踪显示,同时打开谷歌浏览器工作区组件湿度,会显示humiture.c和humiture.h代码,在此把WebIDE和IDE的两个对比一下。手机上显示湿度位列第二,所以#define TEMPERATURE_OBJECT_NO 2 ,DHT11温湿度的脚是复用的。所以dht_sensor.pin = 12; 修改后不要忘记保存!

#include "../../peripheral/peri_dht1122.h"
#include "../../pando/pando_object.h"
#include "c_types.h"
#include "user_interface.h"
#include "humiture.h"
// add your own includes below
#define HUMITURE_OBJECT_NO 2

struct humiture {
        uint8 percent;
};
void ICACHE_FLASH_ATTR
humiture_init() {
        // TODO: add your object init code here.
        DHT_Sensor dht_sensor;
        dht_sensor.pin = 12;
        dht_sensor.type = DHT11;
        peri_dht_init(&dht_sensor);

}
void ICACHE_FLASH_ATTR
humiture_set(struct humiture* value) {
        // TODO: implement object set function here.
        // the set function read value and operate the hardware.


}
void ICACHE_FLASH_ATTR
humiture_get(struct humiture* value) {
        // TODO: implement object get  function here
        // get function retrieve hardware status and assign it to value.
        DHT_Sensor_Data output;
    peri_dht_read(&output);
    value->percent = output.humidity;

}
/*
        auto generated code below!!
        DO NOT edit unless you know how it works.
*/
struct humiture* ICACHE_FLASH_ATTR
create_humiture() {
        struct humiture* humiture = (struct humiture*)os_malloc(sizeof(humiture));
        return humiture;
}
void ICACHE_FLASH_ATTR
delete_humiture(struct humiture* humiture) {
        if(humiture){
                os_free(humiture);
        }
}
void ICACHE_FLASH_ATTR
humiture_object_pack(PARAMS * params) {
        if(NULL == params){
                PRINTF("Create first tlv param failed.\n");
                return;
        }

        struct humiture* humiture = create_humiture();
        humiture_get(humiture);

        if (add_next_float32(params, humiture->percent)){
                PRINTF("Add next param failed.\n");
                return;
        }

        delete_humiture(humiture);
}
void ICACHE_FLASH_ATTR
humiture_object_unpack(PARAMS* params) {
        struct humiture* humiture = create_humiture();

        humiture->percent = get_next_float32(params);

        humiture_set(humiture);
        delete_humiture(humiture);
}
void ICACHE_FLASH_ATTR
humiture_object_init() {
        humiture_init();
        pando_object humiture_object = {
                HUMITURE_OBJECT_NO,
                humiture_object_pack,
                humiture_object_unpack,
        };
        register_pando_object(humiture_object);
}

第十,编译环节,首先Project/clean,然后Project/Built All,如果下方显示没有报错就大功告成了。(允许警告的)

第十一,下载烧写工具 FLASH DOWNLOAD TOOLS  http://pan.baidu.com/s/1jHaGWUM

第十二,用文首的跳线方法烧写固件。刚才我们Built的固件在第二步project\temperature-humiture-demo\bin里面

      固件对应的地址表如下:           
       tisan烧写对应表.JPG

      FLASH DOWNLOAD TOOLS设置如下:文件路径前面要打勾,变绿色。flash尺寸选4M。
       flash-tool.JPG

第十三,拔掉跳线,打开sscom42,刷成功的话串口会有显示如图。

      串口.JPG

     没有ETOH刷机伴侣的,也可以使用Microduino FT232模块。ESP8266的uart0在serial 1即D2、D3位置,和FT232串口D0、D1相连,两者接线成交叉状态,如下图:

      IMG_7976a.jpg

第十四,下载安卓攀多物联手机APP FreeIOT ,安装到你的手机上,环境要求是安卓4.4版本以上,我用的手机是小米3,可以通过。http://pan.baidu.com/s/1i4qYapf

第十五,关键的配置环节,小心脏蹦蹦跳呀。用跳线把GPIO14和gnd连接起来(程序里配置按键采用的是下降沿触发,故这样就是等同于长按按键),在手机的设置里面打开wifi功能连接上家中的路由器,再点击app,右上角有个添加按下,页面会反转,输入你的ssid和password,这时ESP8266和手机会通过你家的路由器自动配置。当手机端自动跳转,在页面上会出现温湿度的项目,那么说明配置成功了。干杯!

第十六,ESP8266和DHT11用杜邦线连接起来, 网状是正面,最左面是D1为正极必须接3.3v,ESP8266只能接3.3v否则会烧板子、会烧板子、会烧板子(重要的事情说三遍),D2是测量端用跳线连接GPIO12,D4接gnd,接通电源,打开app,点击温湿度手机屏幕上就会显示测量的值。

716c010dgw1eyxd4rvfkxj20p018ggqf.jpg

第十七,手机打开3g,点击app远程也可以查询温度和湿度。道理很简单,ESP8266通过家里的wifi把温湿度传到了攀多物联网服务器上,你远程手机登录了他们的服务器,服务器把温湿度数值发送到了你的手机上。
             亲爱的小伙伴让我们插上物联网时代的翅膀在云间飞翔吧。
回复

使用道具 举报

发表于 2015-12-19 16:10:59 | 显示全部楼层
👍 蹲蹲腻害
回复 支持 反对

使用道具 举报

发表于 2015-12-21 21:30:22 | 显示全部楼层
最近ESP8266挺火的,mark一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-23 19:34:18 | 显示全部楼层
iascchen 发表于 2015-12-19 16:10
👍 蹲蹲腻害

谢谢老友鼓励。



回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-23 20:27:46 | 显示全部楼层
mikeliujia 发表于 2015-12-21 21:30
最近ESP8266挺火的,mark一下

谢谢指教。



回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2020-7-7 15:20 , Processed in 0.050043 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表