ESP8266作为MQTT设备接入home assistant

dream/ 十二月 17, 2018/ Arduino, C/C++, ESP8266, MQTT协议, 嵌入式, 树莓派/ 0评论

本文介绍了在 arduino IDE 烧写ESP8266并作为MQTT设备接入到树莓派上运行的home assistant的过程。

一. 环境

arduino IDE,ESP8266,树莓派3B+,Home Assistant 0.83.2

二. arduino IDE编写ESP8266固件并写入

添加PubSubClient库到arduino IDE,打开 工具->管理库 搜索库 PubSubClient by Nick O’Leary 并安装。

编写ESP8266程序代码,并烧写。

示例为一个发布ESP8266工作秒数的传感器。示例代码如下。

#include <ESP82[......]

阅读全文

使用arduino IDE烧写ESP8266

dream/ 十二月 16, 2018/ Arduino, ESP8266, 嵌入式/ 0评论

前段时间了解到使用arduino IDE也能烧写ESP8266,今天做了一次尝试。

一. 安装Arduino IDE

前往Arduino官网,下载并安装对应版本的arduino IDE。

二. 在Arduino IDE中添加ESP8266的Board库

打开Arduino,打开 文件->首选项 ,在“附加开发板管理器网址”中填入http://arduino.esp8266.com/stable/package_esp8266com_index.json,并保存。

打开 工具->开发板->开发板管理器 ,搜索ESP8266,能够找到esp8266 by esp8266 C[……]

阅读全文

通过端口转发实现内网穿透

dream/ 十二月 13, 2018/ linux, 嵌入式, 服务器, 树莓派, 网络/ 0评论

本文介绍了在android或ios通过热点组建局域网,并通过termius进行端口转发以通过外网访问热点局域网内服务器,即内网穿透,的过程。

一.环境

安装有termius的android手机或iphone手机,一台连接到手机热点的服务器(本文使用树莓派3B+),一台有独立ip且运行Linux的云服务器。

二.介绍

通过termius来ssh连接到云服务器,并进行远程端口转发,以使服务器的9999端口的流量转发到本地树莓派的8123端口,从而实现从服务器ip:9999直接访问本地树莓派8123端口。

三.步骤

1.树莓派开启服务器进程,并连接到手机热点。同时[……]

阅读全文

home assistant 中添加ssl支持

dream/ 十二月 12, 2018/ linux, 服务器, 树莓派/ 0评论

本文中介绍了在hassbian环境下通过duckdns和Let’s Encrypt实现home assistant的前端页面https访问的。

一. 环境:

树莓派3B+,hassbian 0.10.1

二. 注册duckdns

前往duckdns(https://www.duckdns.org/domains),注册一个子域名,并指向自己的ip(如果没有外部ip,可在路由器设置端口转发,参考通过端口转发实现内网穿透),同时记录下token值。

三. hassbian中安装duckdns

远程连接至树莓派。切换至用户mossbian,并安装duckdns。安装时如果是覆盖安装[……]

阅读全文

Linux Socket 编程示例

dream/ 十一月 29, 2018/ linux, socket, 网络/ 0评论

〇.前言

近几天的面试中发现多次问到了通过socket套接字来实现进程中通信,因此,自学了socket编程,并写此示例。

一.Linux中socket相关函数

    1. socket()
      int socket(int domain, int type, int protocol);

      socket函数对应于普通文件的打开操作。用于创建一个socket描述符(socket descriptor),它唯一标识一个socket。
      domain:协议域,决定了socket的地址类型。可取值:AF_INET(ipv4)、AF_INET6(ipv6)、AF_LOCAL(Unix域soc[……]

      阅读全文

C语言中堆栈溢出的利用—-某条的神奇面试题

dream/ 十一月 25, 2018/ BUG, C/C++, 代码编译/ 0评论

今天在看脉脉的时候遇到了一个神奇的问题。

看到的第一感觉是WTF?没有输入参数怎么改全局变量?

后来看评论区后明白了解决方案,堆栈溢出。大佬就是大佬,之前我从未考虑过还有这种操作。

解决方案1. 利用C中的堆栈溢出

在pass函数中创建一个新变量y,那么&y获得y的地址,根据64为机器上C中栈帧大小为8并且栈地址由高向低增长,y的地址+8就是函数外x的地址。

代码:(测试环境GCC 64位)

#include <stdio.h>
#include <stdlib.h>
void pass(){
    int y=0;[......]

阅读全文

双系统从Ubuntu快捷重启到windows

dream/ 十一月 19, 2018/ linux, windows/ 0评论

利用grub来重启到另一个操作系统。

1. 利用grub相关的命令重启到对应标号的系统。在我的电脑上win10对应的为2。

#!bash
sudo grub-reboot 2
reboot

2. 创建桌面入口。该入口的动作为执行上面的脚本。请注意修改对应的值为你希望的。

Name为该入口显示的名字。
Type为入口的类型,这里为可执行程序。
Icon为显示的图标。
Exec为打开该入口时执行的命令。

[Desktop Entry]
Name=重启到windows10
Type=Application
Icon=/home/dts/图片/ico/win10.pn[......]

阅读全文

linux简单字符驱动

dream/ 十一月 13, 2018/ C/C++, linux/ 0评论

这是一个简单的Linux字符驱动模块。
在内存中开辟一块内存,并作为一个字符设备,而这个模块是这个字符设备的驱动。

github链接:https://github.com/Dts0/linux_module/tree/master/mem_mod

一.头文件

定义了mem_dev结构体。包含了指向数据块的指针和数据块的大小。

#ifndef MEM_MOD_H
#define MEM_MOD_H

struct mem_dev{
    char* data;
    unsigned long size;
};

//#define MEMDEV_MAJOR 2[......]

阅读全文

Ubuntu18无法打开vmware问题的解决

dream/ 十一月 7, 2018/ BUG, VMware/ 0评论

Vmware会在第一次启动时编译几个小模块,这时会用到编译工具。

如果没有安装,会在无法启动Vmware,弹出对话框报错 build environment error 。

安装之后就可以正常启动vmware player了。

sudo apt install build-essential gcc

注:在Ubuntu16没出现这种情况,是因为Ubuntu16自带了编译工具还是我没注意?[……]

阅读全文

关于11.1至2号网站停机的原因

dream/ 十一月 2, 2018/ apache, BUG/ 0评论

原因是证书自动更新而没有自动安装,导致已申请了新的证书而服务器下保留的还是旧证书,从而引起apache2无法启动。

问题定位过程:

    1. 11.2号打算上网站查点东西,发现无法访问。提示服务器无响应。
    2. SSR服务正常运行,并且能够正常进行SSH和FTP连接。
    3. SSH远程登录到服务器,尝试重启apache服务,发现启动apache服务失败。
    4. 尝试重启系统,reboot后仍然无法启动apache。
    5. 查找apache的log,发现最后一条log是SSL相关。忽然想起这个月初会自动更新SSL证书。
    6. 检查ssl_error_log,并查看了SSL证书的时间[……]

      阅读全文