Notice. New forum software under development. It's going to miss a few functions and look a bit ugly for a while, but I'm working on it full time now as the old forum was too unstable. Couple days, all good. If you notice any issues, please contact me.
|
Forum Index : Microcontroller and PC projects : PicoMiteWeb firmware for the Pico W - now making real progress
Page 1 of 8 | |||||
Author | Message | ||||
matherp Guru Joined: 11/12/2012 Location: United KingdomPosts: 9139 |
For those not following the other thread, I have ported the PicoMite firmware to the Pico W This variant has all of the functionality of the standard PicoMite with the exception of the GUI commands and function. These have made way for the WEB command that allows wireless access to the internet and the json function has also been added to allow you to parse the data from things like openweathermap.org. No extra hardware is needed to work as a web server and/or web client. The latest alpha release is V5.07.07a3 PicoMiteWeb.zip The code is still alpha so expects lockups and resets and make sure you back up programs to the flash disk, flash slots, or an SDcard (NTP seems to be a particular culprit for lockups). Alternatively do your development in MMEDIT and that way you will never lose anything. To install the firmware just copy the uf2 file to a Pico W in boot mode as normal. To connect to your WiFi router use the command OPTION WIFI ssid$, password$ e.g. OPTION WIFI "myssid","myduffpassword" The Pico will reboot and you should see it report connection and its IP address. You can now use a range of commands to access the network First it is worth executing: WEB NTP [timeoffset] This connects to an NTP server and automatically sets the time and date in the Picomite. The offset is the time in hours that your timezone differs from UTC. e.g. WEB NTP -5 for east coast America and Canada. Currently the firmware supports working as either a TCP SERVER and/or a TCP CLIENT To set the Pico W up as a TCP SERVER (i.e. able to host a simple website) use the command OPTION TCP SERVER PORT n e.g OPTION TCP SERVER PORT 80 Again the Pico W will reboot and will report both the connection to the WiFi router and that a TCP server is now running All the information you need to set up a simple web site and details of the commands are in this thread and I attach my example files here simpleweb.zip Today's new functionality supports TCP client mode. This allows you do talk to a TCP server (obviously ) The command WEB OPEN TCP CLIENT address$, port opens the client and connects to the web address specified. The web address can either be a URL e.g. "api.openweathermap.org" or an IP address e.g. "192.168.1.111" Then we can use the command WEB TCP CLIENT REQUEST request$, buff%() [,timeout] to send a request to the remote server and wait for an answer. The optional timeout parameter is in milli-seconds and defaults to 5000. buff%() is an integer array which will receive the response as a LONGSTRING e.g. WEB TCP CLIENT REQUEST "GET /data/2.5/weather?q=Saffron Walden,uk&APPID=xxxxxxxxxxxxxxxxx"+chr$(10)+chr$(13) If the request times out you will get an error. Otherwise the received data is in the LONGSTRING If the received data is a json string then you can use the JSON$ function to parse it JSON$(array%(),string$) Returns a string representing a specific item out of the JSON input stored in the longstring array%() e.g. JSON$(a%(), “name”) JSON$(a%(), “coord.lat”) JSON$(a%(), “weather[0].description”) JSON$(a%(),”list[4].weather[0].description Examples taken from api.openweathermap.org Having received data from the client it is normally the case that you want to close the client connection using WEB CLOSE TCP CLIENT At the moment only one client connection is allowed A full example application is given below - pretty simple. Note if you have used openweathermap before they have changed the interface and you may need to sign up for a new (free) account to get your APPID . Dim buff%(512) Dim APIKEY$="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" WEB ntp Dim report$="weather?q=Saffron Walden,uk" Dim b$= "GET /data/2.5/"+report$+"&APPID="+APIKEY$+Chr$(10)+Chr$(13) WEB open tcp client "api.openweathermap.org",80 WEB TCP CLIENT REQUEST b$,buff%(),10000 WEB close tcp client Print "Weather for " + Json$(buff%(),"name") Print "Temperature is ",Val(Json$(buff%(),"main.temp"))-273 Print "Pressure is ",Json$(buff%(),"main.pressure") Print Json$(buff%(),"weather[0].description") Edited 2023-02-07 04:44 by matherp |
||||
lizby Guru Joined: 17/05/2016 Location: United StatesPosts: 3152 |
Great progress. I'll find out soon enough, but if flashing over the previous PicoMiteWeb alpha firmware, are OPTIONS lost? Or files in the flash disk? PicoMite, Armmite F4, SensorKits, MMBasic Hardware, Games, etc. on fruitoftheshed |
||||
JohnS Guru Joined: 18/11/2011 Location: United KingdomPosts: 3816 |
That's looking good. Maybe change such as WEB open tcp client "api.openweathermap.org",80 WEB TCP CLIENT REQUEST b$,buff%(),10000 to WEB open http client "api.openweathermap.org",80 WEB HTTP CLIENT REQUEST b$,buff%(),10000 That way you can do HTTPS one day and other than HTTP at some point if desired. John |
||||
TassyJim Guru Joined: 07/08/2011 Location: AustraliaPosts: 6102 |
You will have to list the options and save the list yourself but MMEdit's file manager works happily with the PicoW so it is simple to backup your files to PC. It is always worth keeping a copy on PC with the flash drive, especially during alpha and beta stages. Jim VK7JH MMedit MMBasic Help |
||||
TassyJim Guru Joined: 07/08/2011 Location: AustraliaPosts: 6102 |
Yesterday's firmware was still running happily this morning so stability looks good. With the new alpha, I should be ably to get two picoWs talking to each other. I just need to order that second module. Jim VK7JH MMedit MMBasic Help |
||||
homa Guru Joined: 05/11/2021 Location: GermanyPosts: 351 |
Hello Peter, I am still with the V5.07.07a2 Does the version a3 also delete the flash drive again? Thanks for the output of the assigned IP from DHCP when connecting. Is from you planned that there will be also a possibility to predefine the IP? (e.g. OPTION WIFI myssid$,mypwd$,myIP$) Could you also output the queried IP during the NTP query if you specify an offset? > web ntp ntp address 167.235.156.255 got ntp response: 06/02/2023 21:07:39 > web ntp +1 got ntp response: 06/02/2023 22:07:45 > Here it would also be great if you could specify your own/different NTP server to query. Then you don't have to leave your own network. WEB NTP [timeoffset] myNTPip$ -> WEB NTP +1 "192.168.1.1" or WEB NTP +1 "0.de.pool.ntp.org" Otherwise I think the TCP server is great! The TCP Client also looks promising! I will test it ... the weekend is coming :-) Many greetings Matthias |
||||
lizby Guru Joined: 17/05/2016 Location: United StatesPosts: 3152 |
With a structure like the following, why am I getting a timeout? initial: Dim buff%(512) WEB ntp -5 initialize main: do watchdog 60000 ' lb if not executed in 60 seconds, restart if sMinuteDigit <> mid$(time$,5,1) then newMinute if SIMULATE then poll ' GetUserInputs ' get inputs from local display ' ReadSensors ' get temperature and humidity ' DisplayData loop Sub poll Local p%, t%, ii%, ss$ For ii%=1 To mm.info(max connections) LongString clear buff%() WEB tcp read ii%,buff%() p%=LInStr(buff%(),"GET") t%=LInStr(buff%(),"HTTP") If LLen(buff%()) Then Print "_________________________________________________" ss$="" If (p%<>0) And (t%<>0) And (t%>p%) Then ss$=LGetStr$(buff%(),p%,t%-p%+4) Print "String is ",ss$ EndIf If Instr(ss$,"small") Then Print "sending picture" WEB Transmit FILE ii%,"small.jpg","image/jpeg" ElseIf Instr(ss$,"favicon") Then Print "sending icon" WEB Transmit FILE ii%,"favicon.ico","image/vnd.microsoft.icon" ElseIf Instr(ss$,"HTTP") Then Print "sending page" WEB transmit page ii%,"gh.html" ' "gh.html" EndIf Next ii% End Sub After some initialization, my main loop calls "poll". That successfully sends my page when I make the request in the browser. When I enter data and press the <Submit> button, my GET request is shown with "Print "String is ...". Then after a minute it times out. I had assumed that it would quickly do the 4 loops in "poll" and return to the main loop with the WATCHDOG 60000 statement. What am I doing wrong with this structure? PicoMite, Armmite F4, SensorKits, MMBasic Hardware, Games, etc. on fruitoftheshed |
||||
lizby Guru Joined: 17/05/2016 Location: United StatesPosts: 3152 |
And the answer is: OPTIONS persist, files are not lost. Making some progress: I'm not getting values returned when I check a box and enter a value and press [Simulate]. After a minute, I get a watchdog timeout. Some minutes later I get this on the browser line: http://192.168.1.224/G?Y=0&W=2&W=5&A=&B=&C=74&D=&E=&F= (Which is expected.) I'll try again removing the watchdog command. PicoMite, Armmite F4, SensorKits, MMBasic Hardware, Games, etc. on fruitoftheshed |
||||
homa Guru Joined: 05/11/2021 Location: GermanyPosts: 351 |
Thank you! Good morning Peter, sometimes you should sleep on it first ... It needs of course then also the gateway and the netmask. (e.g. OPTION WIFI mySsid$,myPwd$,myIP$,NetMask$,Gateway$) A lot of work, but very cool! |
||||
TassyJim Guru Joined: 07/08/2011 Location: AustraliaPosts: 6102 |
@homa, While lizby and I both had options and files etc retained with the flashing new firmware 'this time', you should not expect to have the same success. There might be a setting in OPTIONs that causes your system to loose it all. If you want a fixed IP on your WIFI, it is usually better to tell the accesspoint/router to assign the fixed address instead of trying to do it yourself. I think you will find that the WEB NTP command will show you the server IP again if you wait long enough between calls. It does for me with my time-zone included. Jim VK7JH MMedit MMBasic Help |
||||
matherp Guru Joined: 11/12/2012 Location: United KingdomPosts: 9139 |
lizby poll must be called repeatedly and should not be contingent on anything. It is completely benign if no communication has occurred |
||||
pwillard Senior Member Joined: 07/06/2022 Location: United StatesPosts: 292 |
Man, this is really great, I really appreciate it. I initially had some time-out issues... but ultimately it started working after a hard reboot. |
||||
matherp Guru Joined: 11/12/2012 Location: United KingdomPosts: 9139 |
a4 PicoMiteWebV5.07.07a4.zip Fixes a bug in SETPIN and includes support for Waveshare 1.44" display ST7735S |
||||
Amnesie Guru Joined: 30/06/2020 Location: GermanyPosts: 396 |
Hello, wonderful news, but can I replace the normal Pico with the Wifi-version (since they seem to be pin compatible) in my pico VGA board? Or will there be a new PCB? I've read so far that only "internal" (?) pins on the Pico are used, so I can just drop in the new Pico-W version and I am good to go? Greetings Daniel |
||||
matherp Guru Joined: 11/12/2012 Location: United KingdomPosts: 9139 |
The PicoMiteWeb is a variant of the PicoMite, not the VGA version - that would use too much memory to be properly useful even if there wasn't bus contention The memory issue is also why I removed the GUI command from the PicoMite to make the web version Edited 2023-02-08 03:46 by matherp |
||||
homa Guru Joined: 05/11/2021 Location: GermanyPosts: 351 |
@Jim: Thanks for pointing that out, but I didn't have any problems either. I am now on version a4. Yes, if there is a DHCP in this network ;-) @Peter: What about the possibility to create your own AP with wifi and ssid over the pico? This is not to create pressure with you now please! Is just an idea of the possibilities of what all could be done with the Pico W and MMbasic projects. This makes no sense to me, there should always be the same output on a command ... |
||||
matherp Guru Joined: 11/12/2012 Location: United KingdomPosts: 9139 |
The output depends on whether LWIP has cached the address and whether it subsequently times out the cache |
||||
lizby Guru Joined: 17/05/2016 Location: United StatesPosts: 3152 |
I'm still stuck. I changed the original webserver.bas program to serve my html page, gh1.html: Dim buff%(512) Dim myfloat!=16.123 Dim myint%=999 Dim mystring$="The PicoMite Web is GO!!!" WEB ntp -5 Do poll Loop ' Sub poll Local p%, t% For a%=1 To MM.Info(max connections) LongString clear buff%() WEB tcp read a%,buff%() p%=LInStr(buff%(),"GET") t%=LInStr(buff%(),"HTTP") If LLen(buff%()) Then Print "_________________________________________________" s$="" If (p%<>0) And (t%<>0) And (t%>p%) Then s$=LGetStr$(buff%(),p%,t%-p%+4) Print "String is ",s$ EndIf If Instr(s$,"small") Then Print "sending picture" WEB Transmit FILE a%,"small.jpg","image/jpeg" ElseIf Instr(s$,"favicon") Then Print "sending icon" WEB Transmit FILE a%,"favicon.ico","image/vnd.microsoft.icon" ElseIf Instr(s$,"HTTP") Then Print "sending page" WEB transmit page a%,"gh1.html" ' "test4.html" EndIf Next a% End Sub The page is served fine: If I click the "LOUVER VENT" checkbox, put "74" in the "Outside Humidity" box, and press "Simulate", nothing happens for some time and then I get this: There's never a response from the server, and MMBasic is locked up--I have to power cycle to get the ">" prompt. (In fact, the server is locked up immediately after it prints "sending page".) Attached is the html file, "g1html.zip"--it contains gh1.html. Any thoughts on what I should do? PicoMite, Armmite F4, SensorKits, MMBasic Hardware, Games, etc. on fruitoftheshed |
||||
matherp Guru Joined: 11/12/2012 Location: United KingdomPosts: 9139 |
I think I understand the issue but I'll start with a much simpler example and see what, if anything, needs to change Edited 2023-02-08 04:50 by matherp |
||||
TassyJim Guru Joined: 07/08/2011 Location: AustraliaPosts: 6102 |
I can't see the attachment. What browser are you using? If you print out the full packet sent by your broqwser, it migh thelp see what's happening. If (p%<>0) And (t%<>0) And (t%>p%) Then longstring print buff%()' add this line. Jim VK7JH MMedit MMBasic Help |
||||
Page 1 of 8 |
Print this page |