espressif/esp-joylink

esp8266平台编译错误?找不到蓝牙头文件?

Closed this issue · 35 comments

  • 我在搭建好编译环境之后,make menuconfig之后,开始编译 make 之后发现报错如下:
  • 纳闷的是,根据提示好像找不到 与蓝牙相关的头文件? esp8266和蓝牙没关系啊?
CC build/esp-joylink/port/app/joylink_app.o
E:/Espressif/Esp32/esp-idf/home/XuHongYss/ESP8266_RTOS_SDK/MyProject/esp-joylink/port/app/joylink_app.c:29:29: fatal error: esp_gap_ble_api.h: No such file or directory
compilation terminated.
make[1]: *** [/home/XuHongYss/ESP8266_RTOS_SDK/make/component_wrapper.mk:286:port/app/joylink_app.o] 错误 1
make: *** [E:/Espressif/Esp32/esp-idf/home/XuHongYss/ESP8266_RTOS_SDK/make/project.mk:467:component-esp-joylink-build] 错误 2

ttl h938evhexn dfpt8

  • 原因找到了!现在的sdk区别是 esp8266或者是esp32的宏定义不是 CONFIG_IDF_PLATFORM_ESP8266 ,而是 CONFIG_TARGET_PLATFORM_ESP8266 !!!

8266用打上TAG的3.1分支
commit号是:db1b044312f1260ccf0ce08e0ff8a31f1e5e9acc

  • 好的。目前我发现我用京东微联的手机配网获取的wifi密码是空的!!!

image

@xuhongv 是不是你配网的时候,没有把密码输进去?

  • 没有啊。。。我是输进去的,我怀疑是我的 aes密钥解密出错?我的make menuconfg 配置界面和后台配置如下,我就配置这里:

image

  • 是否我的操作有问题?
  • app端使用的是 小京鱼 安卓端 v6.3.2 build:55135_沙箱

@xuhongv

如果你用自己的新建的设备的话,注意这几个参数要改:

  • AES KEY
  • PUBLIC KEY
  • PRIVATE KEY
  • UUID

然后配网的时候,扫描你自己新建设备的二维码

  • 请问一下,在 make menuconfig 和这个配置文件也找不到 私钥的配置?

image

joy link_extern.c 里面, 名字叫 CONFIG_JOYLINK_PRIVATE_KEY

如果你云端的设备是在1月15号之后才注册的,需要添加这个key,这个key 需要你将你调试的设备 MAC地址上传上去,才可以拿到

  • 请问这个CONFIG_JOYLINK_PRIVATE_KEY 在 make menuconfig 没找到的?
  • 搜索您刚刚说的那个文件,并未找到 CONFIG_JOYLINK_PRIVATE_KEY 这个变量?

image

  • 我怀疑你们都没严谨测试这个工程,在 jd_innet.c文件的,配网回调里面竟然没加这个 memcpy(config.sta.password, result.jd_password, result.jd_password_len);

  • 下面是我加了之后,就可以了获取到ssid和password了!

image

@xuhongv

这个问题好几个月就fix了,我看了下是内部仓库一直没同步到外面,稍后会同步出去

目前你应该只能配网成功,与云端激活绑定不会成功,稍后等仓库同步出去你再试一下

  • 对的。。目前我在串口看到配网成功,app显示激活失败!万分感谢!这边公司项目需要用到!尽快!谢谢!

@xuhongv 你现在拉下最新分支呢

  • thanks
  • 为什么现在配网成功了!再一次上电之后进去配网模式?
  • 以及贵方提供的 light_demo 的对京东的上报和下发处理的数据业务在哪呢?

目前 master 分支上,没有存 SSID和PASSWORD, 暂时你可以忽略这一点,今天会提上去。

另一个问题,如果你是自定义的设备,需要自己适配下你自己的设备,云端下发的数据接口你看下这个API joylink_dev_script_ctrl, 上报的话 你看下这个API joylink_dev_user_data_get, 这里你需要自己实现,针对你自己的设备

  • 好的。你好!目前我下发给今天贵方刚刚更新的工程,发现乱码了。死机了,打印如下,貌似是任务栈不够?

image

  • 下面是重启后的消息打印:

image

  • 原因找到了。个人已经解决!希望贵方可以把这个 为什么现在配网成功了!再一次上电之后进去配网模式? 修复!多谢!!

我先给你个patch

好的!等待你们的更新!我目前仍然找不到哪个方法通知 京东SDK 来连接服务器!目前我可以自动连接路由器了!

你打上我上面发的那个patch,应该就可以自动连接京东的服务的,现在遇到的问题是?

感谢!补丁打完之后,可以自动连接服务了!!目前遇到的问题是如何主动把数据推送到服务器?有应用示范吗?您上面仅仅给我一个方法名字 joylink_dev_user_data_get

云端会回调这个函数来获取设备的状态,在应用代码中,你今需要在这个函数里,把设备的数据给到这个函数的参数的指针指向的地方就可以了

简单的说, 你只要在本地弄个全局变量,然后 memcpy到这个函数的参数指针里就好了,注意数据格式要一样, 如果你的设备参数类型很多的话,注意默认设备快照的长度不能超过1400, 如果超过,你需要在代码里改一下默认最大长度限制,你先试一下是否可以

嗯!我能理解您的意思!我现在的业务是有个按键控制8266,当按键使能时候,会改变状态,然后必须主动推送消息控制面板!但是您上面说的只是云端会通过此函数来获取最新状态,但是不知何时会来获取?这是一个问题!

这个延时,肉眼可以忽略,你可以试一下

设备只要给云端发送一次心跳包,服务器就会来回调一次状态

  • 理解!这个回调函数 joylink_dev_user_data_get 的形参是哪个结构体?从何定义?我在京东的官网文档也没有提到这点。。。

image

举个例子,下面这个结构体是你注册的设备的属性:

typedef struct _user_dev_status_t {
    int Power;
    int Mode;
} user_dev_status_t;

然后你定义一个全局变量来保存设备的状态

user_dev_status_t user_dev;

如果你本地有其他物理按键或者其他的操作,改变了这个设备的状态,你就该下这个变量里对应的参数的值

服务器回调那里就这么写:

int joylink_dev_user_data_get(user_dev_status_t *user_data)
{
    /**
        *FIXME:must to do
    */
    memcpy(user_data, &user_dev, sizeof(user_dev_status_t));
    return 0;
}

如果是云端有控制下来,你就在下面这个API里解析json字段,把相应的参数值复制给这个记录状态信息的全局变量

int joylink_dev_parse_ctrl(const char *pMsg, user_dev_status_t *userDev);

大概意思就是如此,可以参考下

这个issues太长了,每次拉我都要刷新好一会,我先关掉这个issues,你有问题再提一个吧