This project shows how a GreenPAK design can be tested, debugged, and controlled using a website. GreenPAK ICs come with a register control feature. In this way, GreenPAK registers can be controlled on-the-fly. A GreenPAK and Lolin NodeMcu are used in this project. In addition, some web technologies have been used to create a website. However, this project will not include client-side codes. You can look at this link if you want to review it. This project consists of several sections. These are:
- Server Side
- Usage of Website
- Example: Sharp Sensor Node
- Settings / Connections
Below we described steps needed to understand how the project was programmed. However, if you just want to get the result of programming, download GreenPAK software to view the already completed GreenPAK Design File. Plug the GreenPAK Development Kit to your computer and hit the program to design the device.
1. Server Side
The server-side code is written with an ESP8266 / Arduino core. In this way, you can use the ESP8266 development boards like the ESPDuino, SparkFun ESP8266 Thing, ESPresso Lite, WeMos and even the Generic ESP8266 Board as a server. In this project, the Lolin NodeMcu will be used, so the expressions will be on the Lolin NodeMcu.
The Lolin NodeMcu was used to communicate with the GreenPAK registers and host the website. The Lolin NodeMcu and GreenPAK are communicated to each other via I2C protocol. Thanks to GreenPAK, device configurations can be changed on-the-fly. With this feature, GreenPAK registers can be controlled via the website.
Operations done by the server side are:
- Hosting a website and routing incoming request
- Checking destination I2C address
- Writing to the GreenPAK registers
- Reading from the GreenPAK registers
1.1. Hosting a Website and Routing Incoming Request
The HTML and jQuery codes, which were written for the website, take up space in the Lolin NodeMcu's memory. Therefore, the code written for the website is hosted on the remote server. Only HTML, head and body tags are generated as shown in Figure 1. The contents of these tags were pulled from the remote server using jQuery.
Figure 1: Server-Side Html Codes
Each incoming request was directed to the relevant functions.
Figure 2: Routing
1.2. Checking Destination I2C Address
GreenPAKs have 16 selectable I2C addresses. These addresses can be determined using the control code register. The last 3 bits of register are fixed (as 0). The first 4 bits can be changed. The values that the control code register can receive are shown in Figure 3.
Figure 3: Control Code Values
According to these values, the I2C addresses of GreenPAK are shown in Table 1.
Table 1: I2C Addresses according to Control Code
|Control Code||Padding||span class="superscript">2C Address|
The controlGPAK function controls the I2C address that is sent.
It returns 0 if there is a device capable of I2C communication at this address. If there is no device at this address or there is a problem with the communication, it returns a number other than 0. It does this using the wire library.
Figure 4: ControlGPAK Function
The checkDevice function checks all the addresses one by one as shown in Table 1. If there is a device at the target, it adds the address of the device to the response message. Finally, it notifies the suitable devices to the user.
Figure 5: CheckDevice function
NOTE: The checkDevice function only checks whether a suitable device is available at the destination addresses. This device may not be a GreenPAK.
1.3. Writing to the GreenPAK Registers
A GreenPAK can be controlled by changing its registers. The task of each register is different. For the addresses and tasks...Read more »