2017年10月26日 星期四

VB 計算機




Public Class Form1
    Dim tmp As Double = 0
    
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles MyBase.Load
        TextBox1.ReadOnly = True
        Label2.Text = tmp
        Label3.Text = ""
    End Sub

    Private Sub btn1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ 
Handles btn1.Click
        TextBox1.Text += btn1.Text
    End Sub

    Private Sub btn2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)_
 Handles btn2.Click
        TextBox1.Text += btn2.Text
    End Sub

    Private Sub btn3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)_
Handles btn3.Click
        TextBox1.Text += btn3.Text
    End Sub

    Private Sub btn4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles btn4.Click
        TextBox1.Text += btn4.Text
    End Sub

    Private Sub btn5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles btn5.Click
        TextBox1.Text += btn5.Text
    End Sub

    Private Sub btn6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles btn6.Click
        TextBox1.Text += btn6.Text
    End Sub

    Private Sub btn7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
  Handles btn7.Click
        TextBox1.Text += btn7.Text
    End Sub

    Private Sub btn8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles btn8.Click
        TextBox1.Text += btn8.Text
    End Sub

    Private Sub btn9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles btn9.Click
        TextBox1.Text += btn9.Text
    End Sub

    Private Sub btnplus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles btnplus.Click
        If CDbl(Label2.Text) = 0 Then
            Label2.Text = TextBox1.Text
            Label3.Text = "+"
            TextBox1.Text = ""
        ElseIf Label3.Text = "-" Then
            Label2.Text = CDbl(Label2.Text) - CDbl(TextBox1.Text)
            Label3.Text = "+"
            TextBox1.Text = ""
        ElseIf Label3.Text = "*" Then
            Label2.Text = CDbl(Label2.Text) * CDbl(TextBox1.Text)
            Label3.Text = "+"
            TextBox1.Text = ""
        ElseIf Label3.Text = "/" Then
            Label2.Text = CDbl(Label2.Text) / CDbl(TextBox1.Text)
            Label3.Text = "+"
            TextBox1.Text = ""
        Else
            Label2.Text = CDbl(Label2.Text) + CDbl(TextBox1.Text)
            Label3.Text = "+"
            TextBox1.Text = ""
        End If
    End Sub

    Private Sub btnequ_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)_
 Handles btnequ.Click
        If TextBox1.Text = "" Then
            TextBox1.Text = Label2.Text
            Exit Sub
        End If
        Select Case Label3.Text
            Case "+"
                TextBox1.Text += CDbl(Label2.Text)
            Case "-"
                TextBox1.Text = CDbl(Label2.Text) - CDbl(TextBox1.Text)
            Case "*"
                TextBox1.Text = CDbl(Label2.Text) * CDbl(TextBox1.Text)
            Case "/"
                TextBox1.Text = CDbl(Label2.Text) / CDbl(TextBox1.Text)
        End Select
    End Sub

    Private Sub btnsub_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)_
 Handles btnsub.Click
        If CDbl(Label2.Text) = 0 Then
            Label2.Text = TextBox1.Text
            Label3.Text = "-"
            TextBox1.Text = ""
        ElseIf Label3.Text = "+" Then
            Label2.Text += CDbl(TextBox1.Text)
            TextBox1.Text = ""
            Label3.Text = "-"
        ElseIf Label3.Text = "*" Then
            Label2.Text *= CDbl(TextBox1.Text)
            TextBox1.Text = ""
            Label3.Text = "-"
        ElseIf Label3.Text = "/" Then
            Label2.Text = CDbl(Label2.Text) / CDbl(TextBox1.Text)
            Label3.Text = "-"
            TextBox1.Text = ""
        Else
            Label2.Text = CDbl(Label2.Text) - CDbl(TextBox1.Text)
            Label3.Text = "-"
            TextBox1.Text = ""
        End If
    End Sub

    Private Sub btnexit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)_
 Handles btnexit.Click
        Application.Exit()
    End Sub

    Private Sub btn0_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles btn0.Click
        TextBox1.Text += btn0.Text
    End Sub

    Private Sub btnmul_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)_
 Handles btnmul.Click
        If CDbl(Label2.Text) = 0 Then
            Label2.Text = TextBox1.Text
            Label3.Text = "*"
            TextBox1.Text = ""
        ElseIf Label3.Text = "+" Then
            Label2.Text += CDbl(TextBox1.Text)
            Label3.Text = "*"
            TextBox1.Text = ""
        ElseIf Label3.Text = "-" Then
            Label2.Text = CDbl(Label2.Text) - CDbl(TextBox1.Text)
            Label3.Text = "*"
            TextBox1.Text = ""
        ElseIf Label3.Text = "/" Then
            Label2.Text = CDbl(Label2.Text) / CDbl(TextBox1.Text)
            Label3.Text = "*"
            TextBox1.Text = ""
        Else
            Label2.Text = CDbl(Label2.Text) * CDbl(TextBox1.Text)
            Label3.Text = "*"
            TextBox1.Text = ""
        End If
    End Sub

    Private Sub btndiv_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
 Handles btndiv.Click
        If CDbl(Label2.Text) = 0 Then
            Label2.Text = TextBox1.Text
            Label3.Text = "/"
            TextBox1.Text = ""
        ElseIf Label3.Text = "+" Then
            Label2.Text += CDbl(TextBox1.Text)
            Label3.Text = "/"
            TextBox1.Text = ""
        ElseIf Label3.Text = "-" Then
            Label2.Text = CDbl(Label2.Text) - CDbl(TextBox1.Text)
            Label3.Text = "/"
            TextBox1.Text = ""
        ElseIf Label3.Text = "*" Then
            Label2.Text = CDbl(Label2.Text) * CDbl(TextBox1.Text)
            Label3.Text = "*"
            TextBox1.Text = ""
        Else
            Label2.Text = CDbl(Label2.Text) / CDbl(TextBox1.Text)
            Label3.Text = "/"
            TextBox1.Text = ""
        End If
    End Sub

    Private Sub reset_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
 Handles reset.Click
        Label2.Text = 0
        Label3.Text = ""
        TextBox1.Text = ""
    End Sub

    Private Sub btndot_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles btndot.Click
        TextBox1.Text += btndot.Text
    End Sub
End Class


修改成如下的畫面


Electron.js ----Hello World





安裝Node.js非常簡單,我這裡是Windows X64位元作業系統,這裡我就以我的作業系統為例,我們直接打開Node.js官網:https://nodejs.org/en/,直接在首頁下面就可以看到DownLoad,我們點擊最新版6.1.0 Current下載即可,你也可以使用穩定版本,如4.4.4LTS版本。我這裡使用的是6.1.0 Current版本。
下載之後,我們直接點擊下一步,下一步即可安裝完成。安裝完成之後,我們只需要使用快速鍵Window+R打開運行,然後輸入cmd進入命令列,最後鍵入node -v回車,能夠正確顯示你當前Node.js版本,即可安裝完成。

Node.js自帶一個非常棒的包管理工具:npmnpm是可以快速的找到你的包並載入你的Node.js環境中。比如接下來的Electron.js也是通過npm工具來安裝的。
我們可以直接在命令列輸入npm -v即可查看npm的版本。
我們正式進入Electron.js的安裝。

安裝Electron.js有以下步驟:
·        必須啟動以管理員運行的命令列
·        在命令列中輸入npm install -g electron-prebuilt回車,即可安裝Electron.js
·        等待安裝完成之後,在命令列輸入electron -v能夠顯示Electron.js版本號代表安裝成功。我這裡的版本是v1.1.0版本。


安裝Electron.js就這麼簡單!

Electron.js ----Hello World

既然說Electron.js能夠開發桌面應用程式,那起碼我們學習過程中最基本的就是能夠開發一個顯示Helle World的桌面應用程式吧。那我們直接進入教程吧:
·        D 新建一個electronjs的目錄,用做Electron.js開發的專案的工作空間。
·        electronjs目錄下,創建一個Hello Electron的資料夾。
·        Hello Electron下麵創建三個文件:
o   package.json 這個檔主要是配置應用程式基本資訊和開機檔案
o   app.js 應用程式的入口,也就是上面說的開機檔案
o   index.html 一個輸出Hello WorldHTML頁面。
·         package.json中,鍵入以下代碼,如:
{
    "name":"My First Electron App", // 應用程式名稱
    "version":"0.0.1", // 應用程式版本
    "main":"app.js" // 應用程式入口檔
}
·         app.js中鍵入下面代碼,如:
// 載入electron模組
const electron=require("electron");
// 創建應用程式物件
const app=electron.app;
// 創建一個流覽器視窗,主要用來載入HTML頁面
const BrowserWindow=electron.BrowserWindow;

// 聲明一個BrowserWindow物件實例
let mainWindow;

定義一個創建流覽器視窗的方法
function createWindow(){
    // 創建一個流覽器視窗物件,並指定視窗的大小
    mainWindow=new BrowserWindow({
        width:300,
        height:300
    });
   
    // 通過流覽器視窗物件載入index.html檔,同時也是可以載入一個互聯網位址的
    mainWindow.loadURL('file://'+__dirname+'/index.html');
    // 同時也可以簡化成:mainWindow.loadURL('./index.html');
   
    // 監聽流覽器視窗物件是否關閉,關閉之後直接將mainWindow指向空引用,也就是回收物件記憶體空間
    mainWindow.on("closed",function(){
        mainWindow = null;
    });
}

// 監聽應用程式物件是否初始化完成,初始化完成之後即可創建流覽器視窗
app.on("ready",createWindow);

// 監聽應用程式物件中的所有流覽器視窗物件是否全部被關閉,如果全部被關閉,則退出整個應用程式。該
app.on("window-all-closed",function(){
    // 判斷當前作業系統是否是window系統,因為這個事件只作用在window系統中
    if(process.platform!="darwin"){
        // 退出整個應用程式
        app.quit();
    }
});

// 監聽應用程式圖示被通過點或者沒有任何流覽器視窗顯示在桌面上,那我們應該重新創建並打開流覽器視窗,避免Mac OS X系統回收或者銷毀流覽器視窗
app.on("activate",function(){
    if(mainWindow===null){
        createWindow();
    }
});

·         index.html中鍵入下面代碼,如:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8" />
<title>Hello World</title>
</head>
<body>
    Hello World!
</body>
</html>
·        到處位置我們就已經完成基本的初始化了,我們只需要通過命令列輸入:d:回車,進入D,然後再輸入cd electronjs/Hello Electron進入當前的Hello Electron資料夾中。
·        然後輸入electron .,神奇的事情就發生了。你可要看到下圖所示:





https://www.kancloud.cn/winu/electron/154345

2017年10月24日 星期二

Use NodeMCU to drive DHT11 and send temperature/humidity value to MQTT server





/*
 * Use NodeMCU to drive DHT11 and send temperature/humidity value to MQTT server
 * CopyRight www.osoyoo.com
 * Software:
 * Arduino IDE(version 1.6.4+)
 * ESP8266 Board Package and the Serial Port Driver
 * MQTT Clirnt (MQTTBox here)
 * Arduino library: PubSubClient
 * Arduino library:DHT
 * Connection
 * NodeMCU DHT11 sensor
 * 3.3v    VCC
 * D3      DATA
 * GND     Ground
 *   *
 */
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include<dht.h>
dht DHT;

// Define NodeMCU D3 pin to as temperature data pin of  DHT11
#define DHT11_PIN D3

// Update these with values suitable for your network.
//const char* ssid = "******";//put your own wifi ssid here
//const char* password = "******";// put your wifi password here
const char* ssid = "PTS-2F";//put your wifi ssid here
const char* password = "" ;//put your wifi password here

const char* mqtt_server = "broker.mqtt-dashboard.com";
//const char* mqtt_server = "iot.eclipse.org";

WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
char msg[50];
int value = 0;

void setup_wifi() {
   delay(100);
  // We start by connecting to a WiFi network
    Serial.print("Connecting to ");
    Serial.println(ssid);
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED)
    {
      delay(500);
      Serial.print(".");
    }
  randomSeed(micros());
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  Serial.println("MQTT-DHT11-Testing");
 
}

void callback(char* topic, byte* payload, unsigned int length)
{
  Serial.print("Command is : [");
  Serial.print(topic);
  int p =(char)payload[0]-'0';
  int chk = DHT.read11(DHT11_PIN);
  // if MQTT comes a 0 message, show humidity
  if(p==0)
  {
    Serial.println("to show humidity!]");
    Serial.print(" Humidity is: " );
    Serial.print(DHT.humidity, 1);
    Serial.println('%');
  }
  // if MQTT comes a 1 message, show temperature
  if(p==1)
  {
  // digitalWrite(BUILTIN_LED, HIGH);
   Serial.println(" is to show temperature!] ");
   int chk = DHT.read11(DHT11_PIN);
   Serial.print(" Temp is: " );
   Serial.print(DHT.temperature, 1);
   Serial.println(' C');
  }
  Serial.println();
} //end callback

void reconnect() {
  // Loop until we're reconnected
  while (!client.connected())
  {
    Serial.print("Attempting MQTT connection...");
    // Create a random client ID
    String clientId = "ESP8266Client-";
    clientId += String(random(0xffff), HEX);
    // Attempt to connect
    //if you MQTT broker has clientID,username and password
    //please change following line to    if (client.connect(clientId,userName,passWord))
    if (client.connect(clientId.c_str()))
    {
      Serial.println("connected");
     //once connected to MQTT broker, subscribe command if any
      client.subscribe("Alex9ufo-DHT3-Command");
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // Wait 6 seconds before retrying
      delay(6000);
    }
  }
} //end reconnect()

void setup() {
  Serial.begin(115200);
  setup_wifi();
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);
  int chk = DHT.read11(DHT11_PIN);
  Serial.print(" Starting Humidity: " );
  Serial.print(DHT.humidity, 1);
  Serial.println('%');
  Serial.print(" Starting Temparature ");
  Serial.print(DHT.temperature, 1);
  Serial.println('C');
}

void loop() {
  if (!client.connected()) {
    reconnect();
  }
  client.loop();
  long now = millis();
  // read DHT11 sensor every 6 seconds
  if (now - lastMsg > 8000) {
     lastMsg = now;
     int chk = DHT.read11(DHT11_PIN);

     String msg="";
     msg= msg+ DHT.temperature;
     char message[58];
     msg.toCharArray(message,58);    
     client.publish("alex9ufo-temp-RaspiData", message);

     msg="";
     msg= msg+ DHT.humidity;
     msg.toCharArray(message,58);    
     client.publish("alex9ufo-humi-RaspiData",message);

     msg="";
     msg= msg+ DHT.temperature;
     msg = msg+"," ;
     msg=msg+DHT.humidity ;
     msg.toCharArray(message,58);

    Serial.print(" Starting Temparature ");
    Serial.print(DHT.temperature, 1);
    Serial.print('C');
    Serial.print("    Starting Humidity: " );
    Serial.print(DHT.humidity, 1);
    Serial.println('%');
 
    Serial.println(message);
     //publish sensor data to MQTT broker
    client.publish("alex9ufo-DHT11-RaspiData", message);
  }
   
}

Slide Swith in Wokwi 控制 EasyBuilderPro HMI 的 指示燈ON ,OFF

Slide  Swith in  Wokwi  控制   EasyBuilderPro HMI 的 指示燈 Lamp  ON ,OFF // 1. 修改 MQTT Broker 網址 const char * mqtt_server = "mqttgo.io...