2017年3月15日星期三

C语言学习-运算符与表达式

运算符和表达式
单目运算符
+
-
++
--
双目运算符
+
_

/
% 取余
关系运算符
>
>=
<
<=
==
!=
逻辑运算符
&&与
||或
!非
赋值运算符
=
x+=8 x=x+8
条件运算符
? 表达式1?表达式2:表达式3 表达式1为真取表达式2,为假取表达式3
逗号运算符
表达式1,表达式2,表达式n x=(a=1),(b=2),(a+b); 最后x=3

C语言学习-数据类型

数据类型
整型
int -32768-+32768
short -32768-+32768
long -2^16-2^16-1
unsigned int 0-65535
unsigned shore -2^16-2^16-1
unsigned long 0-2^32-1
浮点型
float 6-7
double 15-16
long double 18-19
字符型
char

C语言学习-格式化字符串

scanf()函数是格式化输入函数,它从标准输入设备(键盘) 读取输入的信息
调用格式为: scanf("<格式化字符串>",<地址表>)
格式化字符串一般形式为:%[*][输入数据宽度][长度]类型
* 空读一个数据
数据宽度:字符数
长度:
l 长整型
h 短整型
类型
d 十进制带符号整数
o 八进制无符号整数
x 十六进制无符号整数
u 十进制无符号整数
f 小数形式实数
e 指数形式实数
s 字符串
* 空读一个数据

ESP8266读取多个传感器

https://arduinodiy.wordpress.com/2016/10/11/using-the-4-pins-of-the-esp8266-01/
这是一个使用受限的引脚数来接入多个器件的例子,主人使用的是ESP8266-01,
1 URXD GPIO3 UART_RXD
2 CH_PD
3 RESET GPIO16*
4 VCC
5 GND
6 GPIO2*
7 GPIO0* wifi状态工作模式
8 UTXD GPIO1 UART_TXD

有GPIO2,GPIO15,GPIO0(Wifi状态灯及工作模式),GPIO16(REST),GPIO1(UART_TXD),GPIO3(UART_RXD)
使用2个引脚来做I2C,用于BMP180和OLED
使用1个引脚通过OneWire协议读取2个DS18B20,
使用1个引脚使用DHT11

引脚定义如下:
GPIO0->I2C SDA
GPIO2->I2C SCL
GPIO1->DHT11
GPIO3->OneWire Bus

主人使用单总线读取DS18B20,需要知道器件的地址,这是读取地址的链接:
https://arduino-info.wikispaces.com/Brick-Temperature-DS18B20#Test%20Sketch%20to%20read%20DS18B20%20addresses

文章中提到如果DHT11读取数据出现"failed to read",可能是DHT.cpp 156-158
// End the start signal by setting data line high for 40 microseconds.
    digitalWrite(_pin, HIGH);
    delayMicroseconds(40);
要把它注释掉
------------------------------------------------
/*
   Field 1 temp roost (DHT11)
   Field 2 humidity roost (DHT11)
   field 3 Coop temperature (DS18B20)
   field 4 soil temperature (DS18B20)
   field 5 Airpressure (bmp180)
   field 6 Outside temperature (bmp180)
 * */
#include <DHT.h>
#include  <OneWire.h>//  http://www.pjrc.com/teensy/td_libs_OneWire.html
#include <DallasTemperature.h> //   http://milesburton.com/Main_Page?title=Dallas_Tem...
#include <Adafruit_BMP085.h>
#include <ESP8266WiFi.h>
#include "SSD1306.h"
SSD1306  display(0x3c, 0, 2);

#define DHTPIN 1  //GPIO1 (Tx)
#define DHTTYPE  DHT11
#define ONE_WIRE_BUS 3 // GPIO3=Rx

const char* ssid     = "YourSSID";
const char* password = "YourPassword";
const char* host = "api.thingspeak.com";
const char* writeAPIKey = "W367812985"; //use YOUR writeApi

//DHT11 stuff
float temperature_buiten;
float temperature_buiten2;
DHT dht(DHTPIN, DHTTYPE, 15);

//DS18b20 stuff
OneWire oneWire(ONE_WIRE_BUS); //oneWire instance to communicate with any OneWire devices
DallasTemperature sensors(&oneWire);// Pass address of our oneWire instance to Dallas Temperature.
DeviceAddress Probe01 = { 0x28, 0x0F, 0x2A, 0x28, 0x00, 0x00, 0x80, 0x9F};
DeviceAddress Probe02 = { 0x28, 0x10, 0xA4, 0x57, 0x04, 0x00, 0x00, 0xA9};

// bmp180 stuff
Adafruit_BMP085 bmp;

void setup() {
  //I2C stuff
  Wire.pins(0, 2);
  Wire.begin(0, 2);
  // Initialize sensors
  //dht 11 stuff
  dht.begin();
  //ds18b20 stuff
  sensors.begin();//ds18b20
  // set the resolution to 10 bit (Can be 9 to 12 bits .. lower is faster)
  sensors.setResolution(Probe01, 10);
  sensors.setResolution(Probe02, 10);
  //bmp180 stuff
  if (!bmp.begin()) {
    //   Serial.println("No BMP180 / BMP085");
    //   while (1) {}
  }

  //OLED stuff
  display.init();
  display.flipScreenVertically();
  display.setFont(ArialMT_Plain_10);
  delay(1000);

  //  Connect to WiFi network
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
  }
}

void loop() {
  //ds18b20stuff-------------------
  sensors.requestTemperatures(); // Send the command to get temperatures
  temperature_buiten = sensors.getTempC(Probe01);//
  temperature_buiten2 = sensors.getTempC(Probe02);//
  //dht11 stuff--------------------
  float humidity = dht.readHumidity();
  float temperature = dht.readTemperature();
  if (isnan(humidity) || isnan(temperature)) {
    return;
  }
  //bmp stuff-------------------------
    String t= String(bmp.readTemperature());
    String p=String(bmp.readPressure());
  //OLED stuff--------------------------
  display.clear();
  display.drawString(0,10,p);//bmp pressure
  display.drawString(0,24,String(temperature_buiten));//ds18b20
  display.drawString(0,38,String(humidity));//dht11
  display.display();

  // make TCP connections
  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)) {
    return;
  }

  String url = "/update?key=";
  url += writeAPIKey;
  url += "&field1=";
  url += String(temperature);// roost (DHT1)
  url += "&field2=";
  url += String(humidity);// roost (DHT11)
  url += "&field3=";
  url += String(temperature_buiten);//coop temperature (DS18B20 nr 1)
  url += "&field4=";
  url += String(temperature_buiten2); //soil temperature (DS18B29 nr 2)
  url +="&field5=";
  url +=String(bmp.readTemperature());Outside temperature (BMP180)
  url +="&field6=";
  url +=String(bmp.readPressure());// Airpressure (BMP180)
  url += "\r\n";

  // Send request to the server
  client.print(String("GET url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" +
               "Connection: close\r\n\r\n");

  delay(1000);

}

2017年2月16日星期四

minicom AT指令无反应

要感谢这篇文章的作者
https://yjdwbj.github.io/2016/08/26/%E4%BD%BF%E7%94%A8%E7%9A%84%E4%B8%80%E4%BA%9B%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98-%E4%B8%8D%E5%AE%9A%E6%9C%9F%E6%9B%B4%E6%96%B0/
ctrl A A    ctrl A W都是控制换行回车的
最后要用一个ctrl J

ESP8266学习

        ESP8266是我最近在网上看到的一块芯片,是中国上海乐鑫生产的,集wifi, Mcu,于一身,小芯片,大用处.安信可将乐鑫的芯片进行了二次封装,集成了flash,晶振,天线等重新销售.因此互联上的资料很乱,有乐鑫的,安信可的.
        乐鑫的网址http://www.espressif.com/zh-hans
        安信可的网址http://www.ai-thinker.com/

        ESP8266的使用以我的了解,大约有以下几种途径:

  • 一种是AT指令,不管是乐鑫还是安信可的模块,出厂都刷了AT固件,可以通过AT指令控制芯片工作,AT手册两个官网都有相应的资料.

  • 一种是刷入nodemcu的固件,通过lua脚本语言编程,控制芯片工作,项目托管在github,https://github.com/nodemcu/nodemcu-firmware/releases,编译好的固件只有20150704的,分为两个,一个是整数,一个是浮点,其它的版本需要自己编译.
  • 这里有个网址,http://tinylab.org/nodemcu-kickstart/,可以看看,参考如何使用nodemcu来开发esp8266
  • ESPlorer是一个基于java编写的开发开具,https://esp8266.ru/esplorer/,大家可以看看,在这个软件界面,可以直接编写lua脚本并上传调试.

  • 一种是使用官方的SDK或其它的SDK,使用IDE环境进行编程,编译开发



  • 一种是使用用arduino IDE环境,使用esp8266的相关插件,进行开发,在arduino IDE附加开发板管理器网址输入https://github.com/esp8266/Arduino/releases/download/2.3.0/package_esp8266com_index.json




2017年2月1日星期三

ubuntu16.04 nautilus访问google drive

  1. sudo apt install gnome-online-accounts
  2. gnome-control-center online-accounts
  3. 因大家知道的情况,无法连接